【发布时间】:2014-01-11 06:17:44
【问题描述】:
Rebol 中的 IN 函数判断字段是否在对象中:
USAGE:
IN object word
DESCRIPTION:
Returns the word or block in the object's context.
IN is a native value.
ARGUMENTS:
object (any-object! block!)
word -- (modified if series) (any-word! block! paren!)
声称它适用于对象或块。如果我用一个对象尝试它就可以了:
>> in object [foo: 10 bar: 20] 'foo
== foo
但如果我只是尝试使用原始块,它会返回 NONE:
>> in [foo: 10 bar: 20] 'foo
== none
如果它不支持块,我想我会理解的(Rebol2 不支持)。但是在什么情况下它不会返回允许块的 NONE?
冒着将这两个问题合二为一的风险,接受 BLOCK 有什么意义!对于word 参数?如果您有一组要查找的单词,我认为这需要一个块,但它似乎只是返回块:
>> in object [foo: 10 bar: 20] [mumble frotz bar]
== [mumble frotz bar]
>> in object [foo: 10 bar: 20] [mumble frotz]
== [mumble frotz]
冒着提出这三个问题的风险,参加 PAREN 有什么意义!单词有吗?
【问题讨论】:
-
这是 rebol3 中的新行为吗?我似乎无法使用 rebol2 或红色的块:
** Script Error: in expected object argument of type: object port ** Near: in [foo: 10 bar: 20] 'foo -
@GeekyI 它似乎不在 Rebol2 中。但是 Red 0.6.1 似乎接受块作为参数......尽管它的结果似乎是错误的。
obj: make object! [a: 10 b: 20 c: 30]然后in obj [a c]返回对象而不是反弹块。您可能会在他们的跟踪器上提出问题以澄清意图。 -
我刚刚意识到这是 1 中的 3 个问题,因此混乱:-p,我的意思是第一个问题(所以呃..我还不能@提及任何人..?)
-
(@GeekyI 对 OP 的提及会被忽略,如果这是您唯一与之交谈的人,因为当 cmets 出现在他们的问题上时,OP 总是会收到通知。) = > 我没有仔细阅读您的错误。你不能说IN BLOCK!单词!在任何解释器中...块不是在其中查找单词的上下文。您可以说 IN OBJECT!堵塞!在 Rebol3 中,是的,这是一个新功能。