Метод 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.

Ответы на вопрос(3)

Ваш ответ на вопрос