¿Existe un método en Ruby que se refiera a la instancia actual de una clase, en la forma en que self
se refiere a la clase en sí?Método de Ruby como `self` que se refiere a la instancia
Respuesta
self
siempre se refiere a una instancia, pero una clase es ella misma una instancia de Class
. En ciertos contextos, self
se referirá a dicha instancia.
class Hello
# We are inside the body of the class, so `self`
# refers to the current instance of `Class`
p self
def foo
# We are inside an instance method, so `self`
# refers to the current instance of `Hello`
return self
end
# This defines a class method, since `self` refers to `Hello`
def self.bar
return self
end
end
h = Hello.new
p h.foo
p Hello.bar
de salida:
Hello
#<Hello:0x7ffa68338190>
Hello
Lamento no haber elegido este, pero ese primer '' p self' en realidad se ejecuta en el momento en que se analiza la definición de la clase. El 'h = Hello.new' en realidad devolvería el mismo valor que' h.foo'. Menciono esto en caso de que la salida de la lista pueda confundir a un nuevo Rubyista. – lilole
Dentro de un método de instancia de una clase self
se refiere a esa instancia. Para obtener la clase dentro de una instancia, puede llamar al self.class
. Si llamas al self
dentro de un método de clase, obtienes la clase. Dentro de un método de clase no puedes acceder a ninguna instancia de la clase.
La referencia self
está siempre disponible, y el objeto al que apunta depende del contexto.
class Example
self # refers to the Example class object
def instance_method
self # refers to the receiver of the :instance_method message
end
end
no te olvides de los métodos de clase – ahnbizcad
el método self
hace referencia al objeto al que pertenece. Las definiciones de clase también son objetos.
Si usa self
dentro de la definición de clase, se refiere al objeto de la definición de clase (a la clase) si lo llama dentro del método de clase, vuelve a referirse a la clase.
Pero en el método de la instancia se refiere al objeto que es una instancia de la clase.
1.9.3p194 :145 > class A
1.9.3p194 :146?> puts "%s %s %s"%[self.__id__, self, self.class] #1
1.9.3p194 :147?> def my_instance_method
1.9.3p194 :148?> puts "%s %s %s"%[self.__id__, self, self.class] #2
1.9.3p194 :149?> end
1.9.3p194 :150?> def self.my_class_method
1.9.3p194 :151?> puts "%s %s %s"%[self.__id__, self, self.class] #3
1.9.3p194 :152?> end
1.9.3p194 :153?> end
85789490 A Class
=> nil
1.9.3p194 :154 > A.my_class_method #4
85789490 A Class
=> nil
1.9.3p194 :155 > a=A.new
=> #<A:0xacb348c>
1.9.3p194 :156 > a.my_instance_method #5
90544710 #<A:0xacb348c> A
=> nil
1.9.3p194 :157 >
Usted ve puts # 1 que se ejecuta durante la declaración de clase. Muestra que class A
es un objeto de tipo Clase con id == 85789490. Entonces, dentro de la declaración de clase, yo me refiero a la clase.
Entonces, cuando se invoca a los métodos de clase (n. ° 4) self
el método de clase interna (n. ° 2) nuevamente se refiere a esa clase.
Y cuando se invoca un método de instancia (n. ° 5), se muestra que dentro de él (n. ° 3) self
se refiere al objeto de la instancia de clase al que está asociado el método.
Si necesita hacer referencia a la clase dentro de un método de instancia utilizar self.class
puede ser que necesite: sí método?
1.itself => 1
'1'.itself => '1'
nil.itself => nil
hope this help!
- 1. Cómo devolver una nueva instancia de self desde un método de instancia de ruby
- 2. ¿El método object_id de ruby se refiere a la ubicación de la memoria?
- 3. En Ruby, ¿a qué se refiere el "receptor"?
- 4. ¿A qué se refiere el "yo" en un @classmethod?
- 5. ¿Un método de clase que se comporta de manera diferente cuando se llama como un método de instancia?
- 6. WebSocket escalabilidad, la radiodifusión se refiere a
- 7. ¿A qué se refiere `this`?
- 8. Ruby: método de clase de llamada de la instancia
- 9. ¿Clase de plantilla que se refiere a sí misma como un parámetro de plantilla de plantilla?
- 10. Python: ¿Afirmar que la variable es el método de instancia?
- 11. Ruby: establece automáticamente la variable de instancia como argumento de método?
- 12. ¿Cómo encuentro la instancia a la que pertenece un método?
- 13. Un typedef que se refiere a sí mismo
- 14. ¿Qué causa que se llame al "método independiente __init __() con la instancia como primer argumento" de este código Python?
- 15. Se refiere a la propiedad en C#. ¿Reflexión? ¿Genérico? ¿Tipo?
- 16. ¿A qué se refiere el "día cero"?
- 17. Cambio instancia de clase dentro de un método de instancia
- 18. iPhone - ¿cómo encontrar a qué objeto se refiere?
- 19. instancia de python que restablece el método de memoial decorador
- 20. ¿Es "extend self" lo mismo que "module_function"?
- 21. La palabra clave vinculante se refiere a qué?
- 22. En Ruby, dentro de un método de clase, ¿es la clase o una instancia?
- 23. Llamar a un método de instancia privada desde un método de clase en Ruby
- 24. ¿Cómo puedo cambiar la variable a la que se refiere una referencia de C++?
- 25. ¿Cómo se interceptan las llamadas al método de instancia?
- 26. Cómo obtener la tabla una clave externa se refiere a
- 27. Restablecer una instancia de singleton en Ruby
- 28. Usando el método de self-class
- 29. ¿Por qué Python no invoca el método de instancia __init __() en la creación de la instancia, sino que llama a la clase __init __()?
- 30. Acerca de la palabra clave de `self`
'self' * does * hace referencia a la instancia. ¿Tienes un ejemplo concreto? –