У меня есть пара вопросов о методах, процедурах и блоках Ruby, которые кажутся мне довольно странными. Они не столько о синтаксисе или функции, сколько о логике принятых решений.
Вопрос 1:
Почему блоки могут быть переданы в методы (например, каждый), но они не могут быть присвоены переменной?
Я знаю, что вы можете передавать их в процедурах, т. Е. p = Proc.new {...}
(доступ с помощью &p
), но нет смысла заставлять программиста проходить через эти средства.
Вопрос 2:
Почему существует различие между методами и процедурами?
Например, я могу выполнить задачу определения функции и вызова этой функции следующими двумя способами:
def square(x)
x**2
end
square(3)
=> 9
или
square = lambda {|x| x**2}
square.call(3)
=> 9
Почему дифференциация? Например, в Python как определение функции стандартным способом, так и square = lambda x: x**2
выполняют ту же задачу создания функции и присваивания ей square
.