2009-08-26 13 views

回答

1

雷博爾的默認方言(在do方言)不支持通話的概念,具有可變數量的參數的函數。如果你想打破這個基本原則,那麼你需要自己的方言。沒有作出阻止你:

tweet [Hello World How Are You Today?] 

但在這種情況下使用word!代替string!的想法是有點狡猾,因爲許多常見的鳴叫是無效的Rebol的解析器:

tweet [LOL! :)] 

忽略這個問題,請注意,默認情況下你不會得到任何表達式評估。所以這個tweet方言將不得不選擇一種方式來顯示你想要評估的地方。你可能會使用get字元素做變量替換,和括號更普遍的評價:

>> a: 10 
>> b: 20 
>> tweet [When you add :a and :b you get (a + b), LOL ":)"] 
"When you add 10 and 20 you get 30, LOL :)" 

BTW,take-n在羅蘭的例子沒有返回一個塊。我的意思不是直接。這也許可以更好地理解括號,並通過解決隱含的「做」那有每解讀:

do [do (take-n 4) 1 2 3 4] 

take-n作品只有一個參數(「N」),然後返回一個函數,它接受-n參數。讓我們調用函數f,所以這一步評價一個變成的東西相當於:

do [f 1 2 3 4] 

當第二做踢腿,該功能獲取運行...和它返回一個塊。在實踐中,我懷疑你會想要計算這樣的參數。

+0

非常感謝你的答案總是遐想,我將有一個很長的週末來閱讀所有的答案:) – 2009-12-17 23:23:54

1

頁面上的答案是:

是的,一個函數可以有一個可變數量的參數。 Do是這樣的功能,例如在:

take-n: func [n /local spec] [ 
    spec: copy [] 
    for i 1 n 1 [ 
     append spec to word! append copy "a" to string! i 
    ] 
    func spec reduce [:reduce append reduce [to lit-word! append copy "take" to string! n] spec] 
] 
do take-n 4 1 2 3 4 
== [take4 1 2 3 4] 
+0

take-n返回一個塊,所以這是一個參數。事實上,我沒有提出正確的問題,我寧願想寫一些類似 的推文Hello World,而不是鳴叫「Hello World」。 最後我找到了一種方法。 – 2009-08-27 20:13:22