首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Rebol2中将本地上下文块绑定到全局上下文?

如何在Rebol2中将本地上下文块绑定到全局上下文?
EN

Stack Overflow用户
提问于 2014-02-26 22:51:49
回答 2查看 152关注 0票数 4

据我所知,您应该能够将任何块绑定到任何上下文。特别是,可以将全局上下文块绑定到本地上下文:

代码语言:javascript
复制
>> a: context [
    print: does [rebol/words/print "yeah!"]
    f: func[b] [do bind b 'print]
]

>> a/f [print "hello"]
yeah!
== "hello"

因此,必须能够将本地上下文块绑定到全局上下文吗?但我的尝试没有成功:

代码语言:javascript
复制
>> b: context [
    b: [print "hello"]
    print: does [rebol/words/print "yeah!"]
    f: func[] [do bind b 'system]
]

>> b/b
== [print "hello"]

>> do b/b
yeah!
== "hello"

>> b/f
hello

>> do b/b
hello

看来我做到了,但是:

代码语言:javascript
复制
>> equal? bind? 'system bind? in b 'b
== false

>> same? bind? in b 'f bind? in b 'b
== true

我的错误是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-26 23:28:56

您正在绑定分配给b/b的块中的单词,而不是绑定单词b本身。

代码语言:javascript
复制
>> equal? bind? 'system bind? in b 'b
== false

这比较了两个对象,第一个是'system绑定到的对象,另一个是in b 'b绑定到的对象(顶级b对象)。

问题是,块不是真的绑定,而是块中的单词是绑定的。这些块本身没有任何绑定,甚至作为一个概念也没有。而且,分配给b/b的块只是一个恰好分配给b/b的值,而不是'b这个词。

这种比较应该是可行的:

代码语言:javascript
复制
>> equal? bind? 'system bind? first get in b 'b
== true

与此相比较的是分配给b/b的块中的第一个单词的绑定,即您之前绑定的那个print。这个词就是您在b/f中更改绑定的内容。

票数 4
EN

Stack Overflow用户

发布于 2014-02-26 23:40:24

绑定信息是由文字而不是块携带的。当块反弹时,绑定过程将影响块中包含的单词。因此,您的b/b块(而不是in b 'b单词)已正确反弹,但您的检查是错误的。您需要从块中的一个回弹词中检索上下文,如下所示:

代码语言:javascript
复制
>> equal? bind? 'system bind? b/b/1
== true
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22055249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档