那么,
。
采用以下代码来创建上下文:
c: context [a: 2]
您可以看到它创建了一个上下文c
,并且a
在全局上下文中不受约束:
>> ?? c
c: make object! [
a: 2
]
>> a
** Script Error: a has no value
** Near: a
现在,如果您使用 bind 'a c
,它将返回它绑定的上下文中单词的值:
>> get bind 'a c
== 2
这也与in c 'a
相同:
>> (get bind 'a c) = (get in c 'a)
== true
看起来in
是带有翻转参数的bind
版本
那么,in
有何不同呢?
bind
中有一些明显的功能添加,例如为了提高效率而进行改进/copy
,并且还接受block!
而不是单个单词作为其words
参数。
在这种情况下,问题就变成了,为什么in
?
注意
这最初是出于这个问题中的评论,当时我不太明白 bind 的作用,关于 gitter 的讨论促使我发布了这个
最大的区别在于 BIND 可以传播单词的上下文:
>> q: func [/local a b][a: 1 b: 2 return 'a]
>> get bind 'b q
== 2
>> get in q 'b
** Script Error: in expected object argument of type: object port
** Near: get in q 'b
当然,只有 Rebol 2