Hodnota typu set-path! nastavuje "kontextuální odkaz" (kontext slova, index slotu v řadě nebo odkaz klíče v řadě nebo mapě).
Set-path! je subset těchto typesetů: any-block!
, any-path!
, series!
BNF:
<set-path-literal> ::= <path-literal>:
<path-literal> ::= <path-head>/<selector>
<path-head> ::= <word-literal> | <path-literal>
<selector> ::= <integer> | <word-literal> | :<word-literal> | <paren>
Parse:
set-path: [set-word! some selector]
selector: [#"/" [integer! | word! | get-word! | paren!]]
Hodnoty set-path!
lze vytvořit při runtime konstruktorem make
nebo konverzí to
.
>> make set-path! [foo bar baz]
== foo/bar/baz:
Lze vytvořit prázdný set-path o velikosti, zadané celým číslem jako argument:
>> make set-path! 10
== :
Set-path se zde jeví jako název kontejneru. Hodnota celočíselného argumentu není závazná:
sp: make set-path! 2
== :
append sp [fok sok bok]
== fok/sok/bok
length? sp
== 3
type? sp
== set-path!
Konverze `to:
>> to set-path! "foo bar baz"
== foo/bar/baz:
Objekt typu set-path!
podléhá stejným pravidlům při vyhodnocení jako objekt typu path!
. Dospěje-li proces k selektoru, vrací se bezprostředně následující hodnota kolektoru.
Není-li za selektorem žádná hodnota nebo vrací-li výraz sdělení unset
, je vyvoláno chybové hlášení.
Funkcí set-path?
ověříme, zda je zadaná hodnota typu set-path!
.
>> set-path? first [foo/bar:]
== true
>> set-path? quote foo/bar:
== true
Funkce type?
vrací datový typ zadané hodnoty.
>> type? first [foo/bar:]
== set-path!
>> type? quote foo/bar:
== set-path!