在Rebol 2中:
>> foo: make object! [a: 10 b: 20]
>> foo/a
== 10
>> foo/b
== 20
>> first foo
== [self a b]
>> second foo
== [make object! [
a: 10
b: 20
] 10 20]
>> third foo
== [a: 10 b: 20]
>> fourth foo
** Script Error: fourth expected series argument of type:
series date port tuple event
** Near: fourth foo
Run Code Online (Sandbox Code Playgroud)
所以你可以选择它,好像它是值为1,2,3的块.但是在Rebol 3中进行位置选择:
>> first foo
** Script error: cannot use pick on object! value
** Where: first
** Near: first foo
Run Code Online (Sandbox Code Playgroud)
我认为现在已经弃用了(比如选择一个函数来获取它的参数列表).但是,我正在尝试翻译一些代码,例如:
bar: construct/with (third foo) mumble
Run Code Online (Sandbox Code Playgroud)
(a)该代码的重点是什么?
(b)我如何将其翻译为Rebol 3?
的这种用法first,second,third,等进行反思确实弃用(和它的大概就是为什么相当明显).
一般替换是REFLECT,它接受FIELD参数来指定要提取的信息.
为方便起见,REFLECT又由一组函数(有些称为"反射器")包裹:SPEC-OF,BODY-OF,WORDS-OF,VALUES-OF等.这些是使用FIRST反射的首选替代品等.幸运的是,那些"反射器"也被反向移植到R2(2.7.7+).
如何翻译third foo为Rebol 3?
对象上反射THIRD的对应物是BODY-OF.
这个construct/with (third a) b成语有什么意义?
它允许您通过合并 A和B 来构造新对象(A中的值优先于B).
例如,您可以使用此惯用法通过将实际用户提供的选项与默认对象合并来创建完整的"选项"对象.