2014-06-28 92 views
0

我試圖將min,然後max傳遞給方法,但似乎不起作用。將方法傳遞給我在Ruby中創建的方法

def worker(x) 
    [3,4].x 
end 

worker(min) 
+1

@ muistooshort我不同意關閉這個決定。另一個問題是明確地調用名字,這個問題是關於傳遞方法作爲參數,並且有可能有效的答案,涉及lambdas,yield或block傳遞。 – pjs

+0

@pjs我相信這個擴展範圍也會有重複。當然,這個問題還不夠清楚,不能保證擴展,但是歡迎您嘗試說服其他人。 –

+0

如果您確實是指「傳遞方法」,則必須將*方法*包裝到對象中。方法(作爲塊 - 不是lambda和proc)是「一切都是對象」規則中少數例外之一。 'max = Array.instance_method:max' - 現在'max'是沒有'self'的對象。 'arr = [1,2,3]; min.bind(arr).call' - 你讓'arr'知道這個特定的方法,然後你調用它。你可以在這裏閱讀更多關於'UnboundMethod'類的內容:http://www.ruby-doc.org/core-1.9.3/UnboundMethod.html This:http://www.ruby-doc.org/core-1.9。 3/Method.html也可能有用。 –

回答

1

你想通過名稱調用方法嗎?然後,使用Object#send

def worker(x) 
    [3,4].send(x) 
end 

worker(:min) 
# => 3 
worker(:max) 
# => 4