class Object
attr_reader :foo
def initialize
@foo = 'bar'
end
end
Object.new.foo # => 'bar'
''.foo # => nil
//.foo # => nil
[].foo # => nil
Ich möchte, dass sie alle 'bar'
In Ruby, wie kann ich Instanzvariablen in neue Objekte von Core-Klassen initialisieren von Literalen erstellt
Am bewusst zurück, dass Sie dies bereits tun können:
class Object
def foo
'bar'
end
end
Aber ich möchte speziell eine Statusvariable initialisieren. Beachten Sie auch, dass dies nicht funktioniert.
class String
alias_method :old_init, :initialize
def initialize(*args)
super
old_init(*args)
end
end
class Object
attr_reader :foo
def initialize
@foo = 'bar'
super
end
end
''.foo # => nil
auch nicht dies:
class String
attr_reader :foo
def initialize
@foo = 'bar'
end
end
''.instance_variables # => []
Ich bin zu denken beginnen, dass dies nicht wirklich möglich ist.
Der Grund, warum dies für Sie nicht funktioniert, ist, dass all diese anderen Klassen, die von Objekt erben, 'initialize' außer Kraft setzen und nicht die Superklassenversion davon aufrufen. – rampion
Hat meinen Beitrag bearbeitet. –