6.26. kink/VARREF¶
6.26.1. varref型¶
varrefは変数参照である。変数参照は、変数を表す値である。
varrefは (Owner, Sym) の組である。ここで、Ownerは変数の所有者の値であり、Symは変数のシンボルである。
varrefはplain_paramの部分型である。参照: kink/param/PLAIN_PARAM
6.26.1.1. Varref.owner¶
ownerは、VarrefのOwnerを戻す。
例
:Owner <- 42
:Varref <- Owner:Foo
stdout.print_line(Varref.owner.repr) # => 42
6.26.1.2. Varref.sym¶
symは、VarrefのSymのstr値を戻す。
例
:Owner <- 42
:Varref <- Owner:Foo
stdout.print_line(Varref.sym.repr) # => "Foo"
6.26.1.3. Varref <- Content¶
<- 演算子、つまりop_storeメソッドは、Varrefが表す変数に対して、Contentを変数の内容として変数格納操作をおこなう。
例
:V <- 42
stdout.print_line(V.repr) # => 42
6.26.1.4. Varref.load¶
loadは、Varrefが表す変数に対して変数ロード操作を行い、変数の内容の値を戻す。
事前条件
変数の内容が空であってはならない。
例
:V <- 42
stdout.print_line(:V.load.repr) # => 42
6.26.1.5. Varref.any?¶
any?は、Varrefが表す変数に対して変数ロード操作を行い、変数の内容が空でないかどうかを戻す。
例
:Owner <- new_val('Foo' 42)
stdout.print_line(Owner:Foo.any?.repr) # => true
stdout.print_line(Owner:Bar.any?.repr) # => false
6.26.1.6. Varref.require_from(Prefix)¶
require_fromは、モジュールをロードして、そのモジュールを変数に格納する。
このメソッドを呼ぶことは、 `Varref <- MOD.require(Prefix + Varref.sym)` を呼ぶことと等価である。
事前条件
Prefixはstrでなければならない。
例
:NUM.require_from('kink/')
stdout.print_line(NUM.is?(42).repr) # => true
6.26.1.7. Varref.rest¶
restは、変数を元とするrest_param値を戻す。
結果のrest_paramの pass_rest(Rest_args) メソッドは、Rest_argsを変数に格納する。
参照: kink/param/REST_PARAM
例
:take_args <- {(:X :Y :Z.rest)
stdout.print_line(X.repr)
stdout.print_line(Y.repr)
stdout.print_line(Z.repr)
}
take_args('foo' 'bar')
# Output:
# "foo"
# "bar"
# []
take_args('foo' 'bar' 'baz')
# Output:
# "foo"
# "bar"
# ["baz"]
take_args('foo' 'bar' 'baz' 'qux')
# Output:
# "foo"
# "bar"
# ["baz" "qux"]
6.26.1.8. Varref.opt¶
optは、変数を元とするopt_param値を戻す。
結果のopt_paramの pass_arg(Arg) メソッドは、単一要素のベクタ [Arg] を変数に格納する。
結果のopt_paramの pass_nothing メソッドは、空のベクタを変数に格納する。
参照: kink/param/OPT_PARAM
例
:take_args <- {(:X :Y :Z.opt :W.opt)
stdout.print_line(X.repr)
stdout.print_line(Y.repr)
stdout.print_line(Z.repr)
stdout.print_line(W.repr)
}
take_args('foo' 'bar')
# Output:
# "foo"
# "bar"
# []
# []
take_args('foo' 'bar' 'baz')
# Output:
# "foo"
# "bar"
# ["baz"]
# []
take_args('foo' 'bar' 'baz' 'qux')
# Output:
# "foo"
# "bar"
# ["baz"]
# ["qux"]
6.26.2. VARREF.new(Owner Sym)¶
newは、 (Owner, Sym) のvarrefを戻す。
事前条件
Symはstrでなければならない。
例
:VARREF.require_from('kink/')
:Owner <- new_val('Foo' 42)
:Varref <- VARREF.new(Owner 'Foo')
stdout.print_line(Varref.load.repr) # => 42
6.26.3. VARREF.is?(Val)¶
is?は、Valがvarrefかどうかを戻す。