错误“单词不与上下文绑定”是什么意思?

时间:2013-08-24 14:59:13

标签: scope rebol rebol3

在试验Rebol 3中的单词时,我遇到了以下错误。

>> set to lit-word! "g" 4
** Script error: 'g word is not bound to a context
** Where: set
** Near: set to lit-word! "g" 4

由于以下结果,这似乎相当棘手:

>> to lit-word! "g"
== 'g
>> set 'g 4
== 4

我想知道当一个单词看起来与上面的相同时,怎么不能绑定到上下文...

1 个答案:

答案 0 :(得分:4)

在Rebol 3中,控制台和脚本的某些行为对于理解非常重要:

您键入的内容均为Rebol load。如果是load,则将其置于上下文中。

如果我输入:

b: 4
set 'b 5

现有单词b'b没有任何正在评估的代码/数据,这些代码/数据放在system/contexts/user上下文中,因此它已绑定到该上下文。 / p>

>> bound? 'b
== make object! [
    system: make object! [
        version: 2.101.0.3.1
        build: 31-May-2013/18:34:38
        platform: [
            Windows win32-x86
        ]
        product: 'saphir-view
        license: {Copyright 2012 REBOL Technologies
            REBOL is a trademark of REBOL Technologies
            Licensed under the Apache License, Version 2.0.
            See: http://www.apache.org/licenses/LICENSE-2.0
        }
        catalog: make object! [
            datatypes: [end! unset! none! logic! integer! decimal! percent! mo...

并表明这是相同的背景:

>> same? (bound? 'b) system/contexts/user
== true

但是,当您输入to-word "b"时,load看到的所有内容都是一个字to-word和一个字符串。因此,在这种情况下,load会将to-word字词添加到system/contexts/user,但绑定b时没有任何问题,因为它尚未加载。

>> bound? to word! "b"
== none

此外,to word!(或to lit-word!等)在评估时不会绑定任何内容。该绑定必须手动完成。

有关详细信息,请参阅How are words bound within a Rebol module?