Método Ruby, Proc e bloquear confusão

Eu tenho algumas perguntas sobre os métodos, procedimentos e bloqueios do Ruby que me parecem estranhos. Eles não são tanto sobre sintaxe ou função como a lógica por trás das decisões tomadas.

Questão 1:

Por que os blocos podem ser passados ​​para métodos (por exemplo, cada um), mas eles não podem ser atribuídos a uma variável?

Eu sei que você pode passá-los em procedimentos, ou seja,p = Proc.new {...} (acessado com&p), mas não faz muito sentido fazer o programador passar por esses meios.

Questão 2:

Por que existe uma diferenciação entre métodos e procedimentos?

Por exemplo, posso realizar a tarefa de definir uma função e chamar essa função das duas maneiras a seguir:

def square(x)
    x**2
end

square(3)
=> 9

ou

square = lambda {|x| x**2}
square.call(3)
=> 9

Por que a diferenciação? Em Python, por exemplo, ambos definem uma função da maneira padrão e porsquare = lambda x: x**2 realizar a mesma tarefa de criar a função e atribuí-la asquare.

questionAnswers(3)

yourAnswerToTheQuestion