Skip to content

Latest commit

 

History

History
144 lines (101 loc) · 3.14 KB

object.adoc

File metadata and controls

144 lines (101 loc) · 3.14 KB

Datový typ object!

1. Úvodem

Hodnota typu object! reprezentuje pojmenovaný nebo nepojmenovaný kontext (kontejner ve formě bloku), který obsahuje páry word: value. Typ object! je členem typesetů any-object! a default!

2. Vytvoření

Objekty se vytvářejí při runtime použitím konstruktoru make nebo použitím funkcí context, object a contruct.

Idiom make object! vytváří nový objekt, vyhodnocujíce blok specifikací.

Funkce context a object invokují idiom make object!.

Použití funkce make:

>> foo: make object! [x: "bar" y: "baz"]
== make object! [
    x: "bar"
    y: "baz"    ]

>> foo: make object! [x: "bar" y: ()]   ; blok specifikací je vyhodnocován
*** Script Error: y: needs a value
*** Where: y
*** Stack:

Použití funkce context:

>> foo: context [x: "bar" y: "baz"]
== make object! [
    x: "bar"
    y: "baz"    ]

>> foo: context [x: "bar" y: ()]   ; spec block is evaluated
*** Script Error: y: needs a value
*** Where: y
*** Stack: context

Použití funkce object:

>> foo: object [x: "bar" y: "baz"]
== make object! [
    x: "bar"
    y: "baz"    ]

>> foo: object [x: "bar" y: ()]   ; spec block is evaluated
*** Script Error: y: needs a value
*** Where: y
*** Stack: object

Je-li argumentem funkce make hodnota typu object!, vytvoří se nový objekt se zadaným argumentem coby prototypem.

>> foo: make object! [x: "bar" y: "baz"]
== make object! [
    x: "bar"
    y: "baz"
]

>> bar: make foo [z: 42]
== make object! [
    x: "bar"
    y: "baz"
    z: 42
]

Funkce construct vytváří objekt bez vyhodnocení bloku specifikací:

>> foo: construct [x: "bar" y: ()]
== make object! [
    x: "bar"
    y: ()
]

Je-li funkce construct použita s upřesněním /with, vytvoří se nový objekt který je rozšířením zadané hodnoty typu object!:

>> zar: construct/with [z: 42] foo
== make object! [
    x: "bar"
    y: ()
    z: 42
]

3. Literálové schema skladby

Výše uvedené způsoby vytvoření objektu lze schematicky vyjádřit takto:

<object> ::= make object! <object-spec> | object <object-spec> | context <object-spec>
             make <object> <object-spec>

<object-spec> ::= <block>
<object> ::= <název existujícího objektu>

4. Komparace

Na hodnotu typu object! lze aplikovat všechny komparátory: =, ==, <>, >, <, >=, <=, =?.

5. Testování hodnot

Funkcí object? ověříme, zda je zadaná hodnota typu object!.

>> object? foo
== true

Funkce type? vrací datový typ zadané hodnoty.

>> type? foo
== object!

6. Předdefinovaná slova

6.1. Akce

copy, find, put, select

6.2. Funkce

any-object?, class-of, context, distance?, dump-face, face?, fetch-help, foreach-face, get-scroller, help, help-string, layout, metrics?, object, object?, offset-to-caret, offset-to-char, overlap?, parse-func-spec, react, react?, request-font, rtd-layout, save, set-flag, set-focus, show, size-text, stop-reactor, unview, view

6.3. Natives

bind, context?, extend, in, set