Esiste un metodo in Ruby che fa riferimento all'istanza corrente di una classe, nel modo in cui self
fa riferimento alla classe stessa?Metodo ruby come `self` che si riferisce all'istanza
risposta
self
fa sempre riferimento a un'istanza, ma una classe è essa stessa un'istanza di Class
. In determinati contesti self
farà riferimento a tale istanza.
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
uscita:
Hello
#<Hello:0x7ffa68338190>
Hello
Ci scusiamo per il nit pick su questo, ma quel primo 'p self' viene effettivamente eseguito nel momento in cui la definizione della classe viene analizzata. 'H = Hello.new' restituirebbe effettivamente lo stesso valore di' h.foo'. Ne parlo solo nel caso in cui l'output elencato possa fuorviare alcuni nuovi Rubyist. – lilole
Da un metodo di una classe self
esempio si riferisce a tale istanza. Per ottenere la classe all'interno di un'istanza, è possibile chiamare self.class
. Se chiami self
all'interno di un metodo di classe, ottieni la classe. All'interno di un metodo di classe non puoi accedere ad alcuna istanza della classe.
Il riferimento self
è sempre disponibile e l'oggetto a cui fa riferimento dipende dal contesto.
class Example
self # refers to the Example class object
def instance_method
self # refers to the receiver of the :instance_method message
end
end
non dimenticare i metodi di classe – ahnbizcad
il metodo self
fa riferimento all'oggetto a cui appartiene. Anche le definizioni di classe sono oggetti.
Se si utilizza self
all'interno della definizione di classe si riferisce all'oggetto di definizione classe (alla classe) se lo si chiama nel metodo di classe si riferisce nuovamente alla classe.
Ma nel metodo di istanza si riferisce all'oggetto che è un'istanza della classe.
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 >
Si vede il numero 1 che viene eseguito durante la dichiarazione della classe. Mostra che class A
è un oggetto di tipo Classe con ID == 85789490. Quindi all'interno della dichiarazione di classe auto si riferisce alla classe.
Quindi quando viene invocato il metodo di classe (n. 4) il metodo self
all'interno della classe (n. 2) si riferisce nuovamente a tale classe.
E quando viene invocato un metodo di istanza (n. 5), mostra che al suo interno (n. 3) self
fa riferimento all'oggetto dell'istanza di classe a cui è collegato il metodo.
Se è necessario fare riferimento alla classe all'interno di un metodo di istanza utilizzare self.class
potrebbe essere necessario: metodo stesso?
1.itself => 1
'1'.itself => '1'
nil.itself => nil
spero che questo aiuto!
- 1. Modifica Self, Ruby
- 2. In Ruby, a cosa si riferisce il "destinatario"?
- 3. Il metodo object_id di ruby si riferisce alla posizione di memoria?
- 4. Classi ruby: inizializza self vs. @variable
- 5. Ruby e modifica self per un'istanza Float
- 6. Qual è l'uso di java.lang.Class e in che modo si riferisce alla sincronizzazione del metodo statico?
- 7. A cosa si riferisce "sé" in un @classmethod?
- 8. Un typedef che si riferisce a se stesso
- 9. In che modo Angular JS si riferisce a Google Closure?
- 10. Utilizzo del metodo self-class
- 11. C'è qualche differenza tra il metodo di classe Ruby che chiama con il metodo in classe con e senza self?
- 12. Come restituire una nuova istanza di self da un metodo di istanza di ruby
- 13. Che cosa significa "self" in javascript?
- 14. Come si associa a RelativeSource Self?
- 15. Cos'è Swagger e si riferisce a OData?
- 16. Scala: come definire un tipo strutturale che si riferisce a se stesso?
- 17. pip3.4 -V si riferisce alla installazione python2.7
- 18. Metodo tuple richiede esplicita `self` argomento
- 19. Come si scrive un test RSpec per un metodo Ruby che contiene "gets.chomp"?
- 20. Rails Modello metodo self. vs plain
- 21. Che cosa è "self" in Akka?
- 22. VisualVM e Self Time
- 23. JavaScript si riferisce alla finestra anziché alla funzione oggetto all'interno
- 24. A cosa si riferisce il valore restituito da arrayIndexScale?
- 25. Errore in Eclipse: il metodo ... dal tipo ... si riferisce al tipo mancante Entry
- 26. Classe del modello che si riferisce a se stesso come parametro del modello di modello?
- 27. Perché il metodo __init__ del contatore si riferisce a un descrittore?
- 28. Ruby che si connette a SQL Server
- 29. Un metodo di classe che si comporta diversamente quando viene chiamato come metodo di istanza?
- 30. In che modo un metodo python riceve automaticamente 'self' come primo argomento?
'self' * fa * si riferisce all'istanza. Hai un esempio concreto? –