Рубина является объектно-ориентированным языком. Вы можете только обходить и манипулировать объектами, но методы - это не объекты, эрго, вы не можете их пропустить.
You может, однако, спросить рубин, чтобы дать вам прокси-объект для метода с помощью метода 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
так, короче говоря: нет, вы с анно передайте метод, но вы можете указать имя метода или прокси-объекта для этого метода.
Однако идиоматических способом будет использовать блок:
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