Метод Ruby, Proc и блок путаницы

У меня есть пара вопросов о Рубиs методы, процедуры и блоки, которые кажутся мне довольно странными. Oни'не столько о синтаксисе или функции, сколько о логике принятых решений.

Вопрос 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

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

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