“绑定”和“输入”有何不同?

时间:2017-03-20 15:22:55

标签: rebol2

使用以下代码创建上下文

c: context [a: 2]

您可以看到它创建了一个上下文ca未绑定在全局上下文中:

>> ?? 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

注意

这最初是由question中的评论推动的,当我不太明白绑定的作用时,gitter的讨论促使我发布这个

1 个答案:

答案 0 :(得分:1)

最大的区别在于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。