Ответ 1
В соответствии с "Передача методов, таких как блоки в Ruby", вы можете передать метод в виде блока следующим образом:
p [1,2,3].map(&method(:inc))
Не знаю, намного ли лучше, чем катить свой блок, честно.
Если ваш метод определен в классе объектов, которые вы используете, вы можете сделать это:
# Adding inc to the Integer class in order to relate to the original post.
class Integer
def inc
self + 1
end
end
p [1,2,3].map(&:inc)
В этом случае Ruby интерпретирует символ как имя метода экземпляра и пытается вызвать метод для этого объекта.
Причина, по которой вы можете передать имя функции как объект первого класса в Python, но не в Ruby, заключается в том, что Ruby позволяет вызывать метод с нулевыми аргументами без круглых скобок. Python, поскольку она требует скобок, предотвращает любую возможную двусмысленность между передачей имени функции и вызовом функции без аргументов.