当你调用一个方法时,通常会使用点(。)标记符,代码如下:
class MyClass def my_method(my_arg) my_arg * 2 end end obj = MyClass.new obj.my_method(3) #=>6
用Object#send()方法可以取代(。):
obj.send(:my_method, 3) #=>6
send()方法的第一个参数是你要发送给对象的消息,也就是方法的名字。这里既可以使用字符串,也可以使用符号。但是一般认为符号会更好一些。所有剩下的参数(以及代码块)会直接传递给调用的方法。
这是ruby一个很酷的特性,通过send()方法,你想调用的方法成为一个参数,这样就可以在代码运行期间,直到最后一刻才决定调用哪个方法。这种技术称为“动态派发”。