ruby Zugriff auf statische variable
class A
@@ololo = 1
end
A::ololo
A.new.ololo
NoMethodError: undefined method `ololo'
okey. Ich brauche ein attr_reader
class B
@@ololo = 1
attr_reader :ololo
end
A::ololo
NoMethodError: undefined method `ololo'
A.new.ololo
=> nil
wtf??? gibt es ein limit für ruby accessors?
class C
@@ololo = 1
def self.ololo
@@ololo
end
def ololo
@@ololo
end
end
C::ololo
=> 1
C.new.ololo
=> 1
Ruby Männer in der Regel sagen "yeah! ziemlich gut!". ist das ziemlich gut?
Kann jemand kürzere code?
- Hier's etwas, das könnte Ihnen helfen auf dem richtigen Weg. Seine schon zu lange her, seit ich getan habe, nichts zu tun, mit Klassen-Variablen und Klassen-Ebene Instanz-Variablen, um eine angemessene Antwort obwohl.
- Jahr das ist, was ich Suche! aber @fl00r war der erste, der rechts ^___^
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht tun, was Sie tun möchten 🙂
@harald richtig ist.
attr_reader
definieren nur GETTER für die Instanz-variable "static" (aka "Klassenvariablen"), die Sie brauchen, um zu definieren, setter-und getter-selbst:Also:
...
Kürzer:
static_accessor
standardmäßig. Und bleib cool, Mannattr_accessor :ololo
definiert die Methodenololo
undololo=
die Arbeit gegen eine Instanzvariable namens @ololo. Also, was passiert, wenn Sie versuchen, Zugriff aufA::ololo
ruby findet Ihr die Instanz-Methodeololo
- und scheitern, weil Sie versuchen, es zu nennen wie eine Klasse Methode.attr_accessor :ololo
definiert eine Instanzvariable namens@ololo
. Nein, tut es nicht. Instanzvariablen beginnen bestehenden ersten mal setzen Sie Sie - Sie sind nicht überall definiert.static_accessor
und es ist sehr einfach, um es selbst schreiben.static
in Ruby. Klasse Methoden und Variablen sind nur in Instanzmethoden und-Variablen derClass
ObjektJa, Sie können.
Dies ist im Grunde eine Ruby on Rails-Funktion. Jedoch, außerhalb der Schienen, erhalten Sie die Funktionalität aus der Ruby-Facets gem:
https://github.com/rubyworks/facets/blob/master/lib/core-uncommon/facets/module/cattr.rb
Siehe diese Diskussion:
cattr_accessor außerhalb der Schienen