在最后一个例子中,探测值? '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
]
答案 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
]