significa rails que metodos funciones ejemplos array ruby function lambda methods

rails - Funciones de Ruby vs métodos



que significa en ruby (3)

En el lenguaje de programación Ruby , Capítulo 6 (segundo párrafo), dicen:

Muchos idiomas distinguen entre funciones, que no tienen ningún objeto asociado, y métodos, que se invocan en un objeto receptor. Debido a que Ruby es un lenguaje puramente orientado a objetos, todos los métodos son verdaderos y están asociados con al menos un objeto.

Y luego en el medio del sexto párrafo:

Ambos procs y lambdas son funciones en lugar de métodos invocados en un objeto.

Estoy un poco confundido acerca de estas declaraciones. ¿Ruby es verdaderamente puro OO, y por lo tanto no tiene funciones que no están asociadas con objetos (si esa es una definición válida de OO puro), o son procs / lambdas asociados con el objeto Proc? ¿Cuál es la diferencia entre funciones y métodos en Ruby?

Cualquier ayuda para analizar y entender esto sería apreciada.


Creo que la distinción es entre los métodos y la función de primer orden, es decir. funciones que pueden transmitirse como valores.


Procs y lambdas son ambos objetos en sí mismos, con un método de call que en realidad invoca el bloque asociado con el proceso (o lambda). Sin embargo, Ruby proporciona algo de azúcar sintáctica para invocarlos sin la llamada explícita a la call .


lambda s en Ruby son objetos de la clase Proc. Proc objetos Proc no pertenecen a ningún objeto. Se llaman sin vincularlos a un objeto.

Los métodos son objetos de cualquiera de los Method clase o UnboundMethod , dependiendo de si están enlazados o no. Vea la explicación here . Los métodos sin consolidar no se pueden llamar hasta que estén vinculados a un objeto.

lambda{|x| x}.class # => Proc lambda{|x| x}.call(123) # => 123 class Foo def bar(baz) baz end end puts Foo.new.method(:bar).class # => Method puts Foo.new.method(:bar).call(123) # => 123 puts Foo.instance_method(:bar).class # => UnboundMethod puts Foo.instance_method(:bar).call(123) # => throws an exception

Puede bind UnboundMethod a un objeto y luego llamarlo. Pero no puedes bind un Proc a un objeto en absoluto. Sin embargo, los objetos Proc pueden capturar variables locales en el ámbito circundante, convirtiéndose en cierres.