Метод Ruby, Proc и блок путаницы
У меня есть пара вопросов о методах, процедурах и блоках Ruby, которые кажутся мне довольно странными. Они не столько о синтаксисе или функции, сколько о логике принятых решений.
Question 1:
Почему блоки можно передавать в методы (например, в каждый), но нельзя назначать их переменной?
Я знаю, что вы можете передать их в процедурах, т.е.p = Proc.new {...}
(доступ с помощью&p
), но не имеет смысла заставлять программиста проходить через эти средства.
Question 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
.