我有需要的對象的方法,而且它必須適用於該對象的轉換方法:如何指定一個方法作爲參數傳遞?
def f x, conv
conv x
end
我怎麼會調用它一個字符串,並使用to_f
作爲轉換器?這是行不通的:
f '123', &:to_f
編輯:這是一個人爲的例子,我知道這可以簡化或寫入不同。
編輯2:感謝這些誰建議使用塊,這工作。我試圖找出這是否可以用方法來完成,就像函數式語言一樣。
我有需要的對象的方法,而且它必須適用於該對象的轉換方法:如何指定一個方法作爲參數傳遞?
def f x, conv
conv x
end
我怎麼會調用它一個字符串,並使用to_f
作爲轉換器?這是行不通的:
f '123', &:to_f
編輯:這是一個人爲的例子,我知道這可以簡化或寫入不同。
編輯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)
記住,紅寶石是不是功能性的語言,儘管它有很多功能構建的,它是一個非常對象面向語言。
您的方法必須接受一個塊,你必須撥打:
def f x, &conv
conv.call x
end
或
def f x
yield x
end
編輯: 您還可以通過方法與常規的對象(你會看到一個與"".method(:to_i)
),但它們的行爲與特效類似,不能像綁定到對象時那樣在self
上運行。
謝謝。你知道這是否可以用方法來完成,就像函數式語言一樣? – akonsu 2013-04-10 18:30:24
@akonsu是的,這是'map'的用途。 – squiguy 2013-04-10 18:32:07
@squiguy map是什麼? – akonsu 2013-04-10 18:35:53