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!
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
]
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>
Na hodnotu typu object!
lze aplikovat všechny komparátory: =, ==, <>, >, <, >=, <=, =?
.
Funkcí object?
ověříme, zda je zadaná hodnota typu object!
.
>> object? foo
== true
Funkce type?
vrací datový typ zadané hodnoty.
>> type? foo
== object!
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