8
votes

Accéder à une variable d'instance de classe de l'extérieur

Je comprends (je pense) la différence entre les variables de classe et les variables d'instance d'une classe dans Ruby.

Je me demande comment on peut accéder aux variables d'instance d'une classe de l'extérieur de cette classe.

de l'intérieur (c'est-à-dire, dans une méthode de classe au lieu d'une méthode d'instance), il est possible d'y accéder directement, mais de l'extérieur, existe-t-il un moyen de faire myClass.class. [@ $ #] variablename < / code>?

Je n'ai aucune raison spécifique de le faire, j'apprends simplement de rubis et de vous demander si cela est possible.


0 commentaires

3 Réponses :


8
votes
>> foo

0 commentaires

3
votes

Ruby a une classe, un objet de classe et un exemple.

Une variable de classe appartient à une classe.
une variable d'instance de classe appartient à un objet de classe p> blockQuote>

variable de classe: p>

accessible dans la classe et ses instances.
attr_accessor ne fonctionne pas sur les variables de classe. p> blockQquote>

variable d'instance de classe: p>

Accessible uniquement à travers la classe.
attr_accessor fonctionne si vous le définissez dans la classe et non dans l'objet de la classe comme ci-dessous. p> blockQquote> xxx pré>

définissant un getter et un setter sur les instances de la variable d'instance de classe B de: p> xxx pré>

maintenant l'instance de classe La variable B est accessible via la classe propriétaire et ses instances.
En tant que plusieurs jours, l'apprenant rubis, c'est le plus que je puisse faire. P>

`irb(main):021:0* class A
irb(main):022:1> @b = 1
irb(main):023:1> class << self
irb(main):024:2> attr_accessor :b
irb(main):025:2> end
irb(main):026:1> def b
irb(main):027:2> A.b
irb(main):028:2> end
irb(main):029:1> def b=(v)
irb(main):030:2> A.b=v
irb(main):031:2> end
irb(main):032:1> end
=> :b=
irb(main):033:0> A.b
=> 1
irb(main):034:0> c = A.new
=> #<A:0x00000003054440>
irb(main):035:0> c.b
=> 1
irb(main):036:0> c.b= 50
=> 50
irb(main):037:0> A.b
=> 50
irb(main):038:0>`


0 commentaires

-1
votes

en rubis, vous pouvez y parvenir de 2 façons

  1. Définir manuellement getter et setters li>
  2. en utilisant attr_ * méthodes li> ol>

    Permettez-moi d'élaborer les manières ci-dessus pour vous, p>

    définissant manuellement getter et setters strong> p> xxx pré>

    à l'aide d'attr_ * Méthodes forts> p>

    class Human
      attr_accessor :sex
    end
    
    //from outside 
    
    human = Human.new
    // getter method call 
    puts human.sex
    // setter method call to explicitly set the instance variable 
    human.sex = 'female'
    
    puts human.sex 
    // now this prints female which is set 
    


0 commentaires