2014-07-16 54 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]