Ten en cuenta que en las ciencias un problema casi siempere suele tener varias soluciones, no obstante aquí enseñaremos lo más óptimo y mejor.
Solución:
En breve:
a Method
objeto está “ligado” a un objeto de modo que self
apunta a ese objeto cuando usted call
el método y un Proc
no tiene ese comportamiento; self
depende del contexto en el que se Proc
fue creado/llamado.
Sin embargo:
Usted dijo en su pregunta que “los métodos no son objetos”, pero debe tener cuidado de distinguir entre “método” y Method
.
Un “método” es un conjunto definido de expresiones a las que se les da un nombre y se colocan en la tabla de métodos de una clase en particular para una fácil búsqueda y ejecución posterior:
class Foo
def my_method
return 123
end
end
Foo.new.my_method
# => 123
A Method
objeto (o similarmente un UnboundMethod
object) es un objeto Ruby real creado llamando method
/ instance_method
/ etc. y pasando el nombre de un “método” como argumento:
my_Foo = Foo.new
my_Method = my_Foo.method(:my_method)
# => #
my_Method.call
# => 123
my_UnboundMethod = Foo.instance_method(:my_method)
# => #
my_UnboundMethod.bind(my_Foo).call
# => 123
A Proc
object es un conjunto de expresiones a las que no se les asigna un nombre, que puede almacenar para su posterior ejecución:
my_proc = Proc.new 123
my_proc.call
# => 123
Puede resultarle útil leer la documentación de RDoc para UnboundMethod
, Method
y Proc
. Las páginas de RDoc enumeran los diferentes métodos de instancia disponibles para cada tipo.
valoraciones y comentarios
Si eres capaz, tienes la libertad de dejar una reseña acerca de qué te ha gustado de esta crónica.