1

采用以下创建上下文的代码:

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对效率进行了改进,并且还接受了 ablock!而不是单个单词作为其words论点。

在这种情况下,问题就变成了,为什么in

笔记

这最初是由 this question中的评论引起的,当时我不太了解 bind 的作用,关于gitter的讨论促使我发布了这个

4

1 回答 1

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。

于 2017-08-25T02:55:22.827 回答