什么:[]在这个Ruby语句中传递给.send时做什么?

时间:2014-07-16 12:58:06

标签: ruby

我调试了一些Ruby代码并遇到了一些我不熟悉的东西。

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

这条线做什么?我被传递给:[]的{​​{1}}作为第一个参数感到困惑。

作为参考,send是一个类的实例(user_array),而Chef::Node是一个字符串。

3 个答案:

答案 0 :(得分:7)

send动态调用方法:

obj.send(:method, arg1, arg2)

实际上会像:

obj.method(arg1, arg2)

因此,在您的情况下,代码相当于:

user_array.[](hash_key)

方法[]是一个特殊的方法名称,通常使用其语法糖形式用ruby编写:

user_array[hash_key]

答案 1 :(得分:2)

它只是调用[]方法。它返回数组/哈希的元素。这相当于致电:

user_array[hash_key]

答案 2 :(得分:0)

使用其余参数发送第一个参数。

在这种情况下,它应该转换为user_array [hash_key]

http://ruby-doc.org/core-2.1.2/Object.html#method-i-send