'bind'和'in'有何不同?

  • 本文关键字:何不同 in bind rebol2
  • 更新时间 :
  • 英文 :


采用以下代码来创建上下文

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

相关内容

  • 没有找到相关文章

最新更新