2014-07-16 87 views
2

我正在調試一些Ruby代碼,並遇到了一些我不熟悉的東西。做什麼:[]在傳遞給.send這個Ruby語句時做什麼?

user_array = user_array.send(:[], hash_key) 

這條線做什麼?我很困惑:[]作爲第一個參數傳遞給send

僅供參考,user_array是類(Chef::Node)的一個實例,hash_key是一個字符串。

+4

也就是說餅乾怪獸... – Anthony

+0

你知道什麼'發送'嗎? –

+0

'send'調用方法。所以在接受的答案中解釋,'obj.send(:to_s)'與'obj.to_s'相同。 – tommarshall

回答

7

send動態調用一個方法:

obj.send(:method, arg1, arg2) 

將有效地像:

obj.method(arg1, arg2) 

所以在你的情況下,代碼是等價的噸至:

user_array.[](hash_key) 

方法[]是一種特殊的方法名稱,這是使用它的語法糖的形式,通常使用Ruby編寫:

user_array[hash_key] 
+0

很好解釋:) –

2

它只是簡單地調用[]方法。它返回數組/散列的一個元素。這相當於打電話:

user_array[hash_key]