2010-09-10 70 views
4

讓我說我有類A與其中的一些方法。Ruby:如何使用'send'方法調用一個方法,並使用散列?

可以說字符串methodName是其中的一種方法,我已經知道我想給它什麼參數。他們是在哈希{「參數1」 =>值1,「參數2」 =>值2}

所以我必須:

params = {'param1' => value1, 'param2' => value2} 
a = A.new() 
a.send(methodName, value1, value 2) # call method name with both params 

我希望能夠通過傳遞我的哈希以某種方式調用該方法。這可能嗎?

+0

你想你的方法'methodName'到每個PARAMS的傳遞有些命令,比如'method(value1,value2)',還是你希望它們作爲散列來傳遞?方法(:param1 => value1,:param2 => value2)'會做什麼? – 2010-09-10 18:43:59

回答

8

確保方法名是一個符號,而不是字符串(如methodName.to_sym)

無法通過哈希到發送,你需要一個數組,並在它的鍵/值不在一個特定的順序,但該方法的參數需要,所以你需要一些明智的方法來獲得正確的順序值。

然後,我想你需要使用splat運算符(*)來傳入該數組來發送。

methodName = 'center'  
params = {'param1' => 20, 'param2' => '_'}.sort.collect{|k,v| v} 
a = "This is a string" 
a.send(methodName.to_sym, *params) 

=> "__This is a string__" 

就是這樣的。

+0

我需要在我的方法內排序,或排序數組? – dfgdfgd 2010-09-10 18:21:29

+2

「發送」字符串而不是符號有什麼問題? – jordinl 2010-09-10 18:39:14

+0

我猜字符串工作我也記得它應該是一個符號,但我必須考慮別的東西。 – 2010-09-11 05:44:12

2

我目前使用Ruby 2.2.2,你可以在一個散列通通過使用關鍵字機械師一起發送:

params = {param1: value1, param2: value2} 
a = A.new() 
a.send(methodName, params) 
相關問題