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
.