【问题标题】:How are 'bind' and 'in' different?'bind' 和 'in' 有什么不同?
【发布时间】:2017-03-20 15:22:54
【问题描述】:

使用以下代码创建一个上下文

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

注意

这最初是由 question 中的 cmets 推动的,当时我不太了解 bind 是做什么的,gitter 上的讨论促使我发布此

【问题讨论】:

    标签: rebol2


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多