2016-01-02 23 views
3

這是相當簡單的用Clojure -鑽營一個可變參數proc和獲得另一個可變參數PROC紅寶石

(def a (partial println "Hello:")) 
(a "Bob") 
(a "Bob" "Ganesh") 

但這似乎很難在Ruby中。

:puts.to_proc.curry(3)[Kernel, "Hello:"]("Bob") 
:puts.to_proc.curry(4)[Kernel, "Hello:"]("Bob", "Ganesh") 

Proc#咖喱似乎不能返回一個可變參數fn。

我們當然可以

class Proc 
    def partial(*left) 
    Proc.new do |*right| 
     self.call *left, *right 
    end 
    end 
end 

但我在想,如果這是在標準庫。

+0

請說明這個問題,以便熟悉Ruby而不是Closure的人能夠理解它。通過「varargs fn」,你的意思是一個可變數量的參數的curried過程?對於你的例子,你想在被調用時返回什麼? –

+0

不確定的數字,是的。可變參數是一個語言中性術語。 –

回答

0

試試這個:

:puts.to_proc.curry(3)[Kernel, "Hello:"].("Bob") 

在Ruby中,裸括號只工作調用方法。對於調用特效,您需要執行.call()[].()

+0

三種方式?五種方式! 'f = - > s {puts「說#{s}!」 }; f.yield(「hey」)#=>「說嘿!」; f ===「嘿」#=>「說嘿!」'。 –

+0

這並沒有真正解決這個問題。 –

+0

也許我誤解了?但是,這使得您的原始發佈工作的代碼 – Jonah