Ruby是一种面向对象的语言。你只能传递和操纵对象,但方法不是对象,但是,你不能传递它们。
您可以,但是,请红宝石给你一个代理对象通过Object#method
方法的方法,该方法将返回一个Method
对象(鸭类型Proc
):
def call_a_method_via_a_parameter(some_method)
some_method.('Hi')
end
def my_method(param)
puts param
end
call_a_method_via_a_parameter(method(:my_method))
# Hi
替代将通过该方法的名为Symbol
:
def call_a_method_via_a_parameter(some_method)
public_send(:some_method, 'Hi')
end
def my_method(param)
puts param
end
call_a_method_via_a_parameter(:my_method)
# Hi
因此,简而言之:不,你ç annot通过该方法,但你可以通过传递该方法的名称或该方法的代理对象。
然而,惯用的方法是使用块:
def call_a_method_via_a_parameter
yield 'Hi'
end
def my_method(param)
puts param
end
call_a_method_via_a_parameter(&method(:my_method))
# Hi