2013-02-08 18 views
1

這裏是我的代碼:如何討好的方法有一個參數

def f x 
    x 
end 

g = method(:f).to_proc.curry.(123) 

p g 

我想g是一個可調用不帶參數,適用於123f。相反,g包含應用程序的結果。

我在做這個複雜的方式嗎?

編輯:是的,g = lambda {f 123}的作品,但我問如何咖喱f

+0

似乎這是唯一的方法柯里化可以在紅寶石工作! 嘗試'g = method(:f).to_proc.curry [123]',這也適用。 – 2013-02-08 17:43:36

+0

目前'方法(:f).curry [123]'工作正常。我不知道2013年是否屬於這種情況,但您可以放棄_#to_proc_電話。 – 2018-03-02 14:49:27

回答

4

documentation for curry

如果被提供的參數足夠數量時,它把提供的參數到原始proc和返回結果。

因此,在這種情況下,您並沒有真正地從理論的角度來看待您的功能,但實際上您已經擁有了。

g = lambda {f 123} 

似乎更接近於返回一個函數的精神,您可以調用該函數來評估,至少一次所有參數都已確定。

+1

「new」lambda單行語法'g = - > {f 123}' – 2018-03-02 14:52:51

-1

也許你想把你的函數f包裝在lambda(評估f)中。然後,你可以咖喱lambda表達,這樣的事情:

g = lambda{f 123}.curry 
p g[] // or g.call 

現在g是可調用不帶任何參數。

+0

這並不真正地加入參數,因爲您在調用方法時仍然需要提供它。 – user1934428 2016-12-06 12:11:08

相關問題