2013-04-10 31 views
1

我有需要的對象的方法,而且它必須適用於該對象的轉換方法:如何指定一個方法作爲參數傳遞?

def f x, conv 
    conv x 
end 

我怎麼會調用它一個字符串,並使用to_f作爲轉換器?這是行不通的:

f '123', &:to_f 

編輯:這是一個人爲的例子,我知道這可以簡化或寫入不同。

編輯2:感謝這些誰建議使用塊,這工作。我試圖找出這是否可以用方法來完成,就像函數式語言一樣。

回答

2

您可以使用yield執行通過PROC:

def f(x) 
    yield x 
end 

f(x) { |y| y.to_f } 

,或者如果你想要的PROC作爲命名參數,你可以使用&

def f(x, &proc) 
    proc.call x 
end 

你不能只傳遞一個任意函數,因爲在ruby中只有實例方法,所以你不能這樣做:

to_f.to_proc 

得到一個功能,如果你想這樣做,你必須使用send

def g(x, sym) 
    x.send sym 
end 

g(2, :to_f) 

記住,紅寶石是不是功能性的語言,儘管它有很多功能構建的,它是一個非常對象面向語言。

0

您的方法必須接受一個塊,你必須撥打:

def f x, &conv 
    conv.call x 
end 

def f x 
    yield x 
end 

編輯: 您還可以通過方法與常規的對象(你會看到一個與"".method(:to_i)),但它們的行爲與特效類似,不能像綁定到對象時那樣在self上運行。

+0

謝謝。你知道這是否可以用方法來完成,就像函數式語言一樣? – akonsu 2013-04-10 18:30:24

+0

@akonsu是的,這是'map'的用途。 – squiguy 2013-04-10 18:32:07

+0

@squiguy map是什麼? – akonsu 2013-04-10 18:35:53

相關問題