2013-01-15 21 views
3

在雷博爾2:Rebol 2中的對象上的位置PICK是什麼,以及等效的Rebol 3是什麼?

>> 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 

所以,你可以挑選出來的,好像它是爲值1,2,3塊但是這樣的位置選擇在雷博爾3右出:

>> first foo 
** Script error: cannot use pick on object! value 
** Where: first 
** Near: first foo 

據我瞭解,這是現在已經過時(就像在撿了一個函數來獲取它的參數列表)。但是,我試圖翻譯一些代碼,如下所示:

bar: construct/with (third foo) mumble 

(a)該代碼的意義何在?

(b)如何將我把它翻譯成雷博爾3?

回答

3

a)構造構建對象而不評價規範塊。這意味着該規範是some [set-word! any-type!]形式(如果您使用另一個對象的主體,它將始終是)。構建/使用第二個對象(mumble)作爲原型。

b)中的對象的操作似乎已改變如下:

ⅰ)first objectwords-of object

二取代)second objectvalues-of object

取代ⅲ)third object替換由body-of object to block! object

因此您代碼可以被替換爲:

bar: construct/with body-of foo mumble 
+0

好啊。並且它看起來BODY-OF也可以在R2中使用(R2/forward?) – HostileFork

+0

是,R2/Forward。從那裏添加到R2。 – BrianH

5

first這種用法,secondthird等進行反思確實棄用(和它的大概就是爲什麼相當明顯)。

一般更換REFLECT,這需要一個字段參數指定什麼信息要被提取。

爲了方便起見,REFLECT又被一組函數(某些人稱爲「反射器」)包裹起來:SPEC-OF,BODY-OF,WORDS-OF,VALUES-OF等。這些是首選的替換用FIRST等進行反思。幸運的是,這些「反射器」也已經回到R2(2.7.7+)。

如何third foo翻譯成雷博爾3?

與物體上的反射性第三方對應的是BODY-OF。

construct/with (third a) b習語的要點是什麼?

它允許通過合併構造新的對象 A和B(與來自優先於B值)。

所以,你可以,例如,使用這個成語通過合併實際用戶提供的選項爲默認設置的目的是建立一個完整的「選項」對象。

相關問題