Red可以测试价值吗?对于不在全局上下文中的上下文中的变量?

时间:2017-11-11 22:35:59

标签: red

在最后一个例子中,探测值? 'a返回true,因为它检测到'a在全局上下文中有值。但是我想在本地环境中测试一个',这是否有语法?

    context [
        probe value? 'a; false
    ]

    context [
        a: 1
        probe value? 'a; true
    ]

    ; would like false instead of true
    a: 1
    context [
        probe value? 'a; true
    ]

3 个答案:

答案 0 :(得分:3)

我认为最简单的检查是

context [
    probe in self 'a ; none
]

它返回none而不是false,但这是唯一的其他假值,所以它完全适合检查。如果您需要它是false,您可以将to-logic放在前面。

答案 1 :(得分:2)

  

Red可以测试价值吗?对于不在全局上下文中的上下文中的变量?

根据定义,没有。因为没有"全球背景"。

请记住" Rebol(红色)实际上根本没有范围" ... " Rebol(红色)假装它。&#34 ;

(参见:Is there a overall explanation about definitional scoping in Rebol and Red

Rebol有BIND?要求任意的任意字!它被绑定的地方(如果有的话)。红色称这个上下文?所以你可以做的是询问一个单词的绑定是否与你关心的上下文有关。

ctx1: context [a: 10]
ctx2: context [a: 20]

word: bind 'a ctx1

print ctx1 = context? word ; true
print ctx2 = context? word ; false

所以,如果你的意思是"全球背景"实际上是所谓的SYSTEM / WORDS对象,那么这可能是你的测试:

context [
    probe value? 'a ; false
]

context [
    a: 1
    probe system/words <> context? 'a ; true
]

a: 1
context [
    probe system/words <> context? 'a ; false
]

至于这是否适合您的目的,我不知道。只要记住Rebol / Red没有范围,除非你设置了一些适合你正在做的事情的虚假近似。

答案 2 :(得分:1)

这是一个没有在全球范围内搜索的解决方案。 系统/字词,但在本地&#39;的

>> a: 1
== 1
>> context [
[        probe all [
[            find words-of self 'a 
[            value? pick find words-of self 'a 1
[        ]
[        probe value? 'a
[    ]
none
true
== make object! []
>> 
>> context [
[        probe all [
[            find words-of self 'a 
[            value? pick find words-of self 'a 1
[        ]
[        probe value? 'a
[        a: 2
[    ]
none
false
== make object! [
   a: 2
]
>> 
>> context [
[        a: 2
[        probe all [
[            find words-of self 'a 
[            value? pick find words-of self 'a 1
[        ]
[        probe value? 'a
[    ]
true
true
== make object! [
    a: 2
]