http://www.rebol.org/ml-display-thread.r?m=rmlJNWSRebol模擬無限參數從這裏所說的任何例子?
格雷厄姆寫道:
功能可以具有可變數量的參數? 不,但你可以使用'任意類型!函數說明符並傳遞未設置!作爲論據。更好的是使用改進。
http://www.rebol.org/ml-display-thread.r?m=rmlJNWSRebol模擬無限參數從這裏所說的任何例子?
格雷厄姆寫道:
功能可以具有可變數量的參數? 不,但你可以使用'任意類型!函數說明符並傳遞未設置!作爲論據。更好的是使用改進。
雷博爾的默認方言(在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]
當第二做踢腿,該功能獲取運行...和它返回一個塊。在實踐中,我懷疑你會想要計算這樣的參數。
頁面上的答案是:
是的,一個函數可以有一個可變數量的參數。 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]
take-n返回一個塊,所以這是一個參數。事實上,我沒有提出正確的問題,我寧願想寫一些類似 的推文Hello World,而不是鳴叫「Hello World」。 最後我找到了一種方法。 – 2009-08-27 20:13:22
非常感謝你的答案總是遐想,我將有一個很長的週末來閱讀所有的答案:) – 2009-12-17 23:23:54