Ruby 如何访问类变量?
在线Ruby 如何访问类变量?,ruby,Ruby,在线@goodbay=TestClass.variable 怎么了?在Ruby中,必须通过对象上的方法读取和写入对象的@实例变量(和@@class变量)。例如: undefined method 'varible' for TestClass:Class Ruby有一些内置的方法来为您创建简单的访问器方法。如果要在类上使用实例变量(而不是类变量): 您必须正确访问类变量。其中一种方法如下: class TestClass mattr_accessor :variable end cla
@goodbay=TestClass.variable
怎么了?在Ruby中,必须通过对象上的方法读取和写入对象的
@实例变量(和@@class
变量)。例如:
undefined method 'varible' for TestClass:Class
Ruby有一些内置的方法来为您创建简单的访问器方法。如果要在类上使用实例变量(而不是类变量):
您必须正确访问类变量。其中一种方法如下:
class TestClass
mattr_accessor :variable
end
class测试类
@@varible=“var”
“var”类
有其他方法
类RubyList
@@geek=“Matz”
@@国家=‘美国’
结束
RubyList.class\u变量集(:@@geek,'Matz rocks!')
放置RubyList.class\u变量\u get(:@@geek)
你的意思是不是说cattr\u访问者
?:)cattr_accessor是更好的名称,但它只是mattr_accessor的别名(根据我给出的链接)。另外,需要注意的是,这不需要使用accessor方法,因为Object\instance\u variable\u get
将允许访问所有实例变量(@
),而Object\class\u variable\u get
为类变量提供相同的访问方法(@
)不需要显式的getter方法,例如TestClass.instance\u variable\u get(:@variable)
或TestClass.class\u variable\u get(:@@variable)
谢谢,成功了!我希望ruby有更大的灵活性。事实证明,我们使用getter而不是直接访问变量,使用小型pojo对象会让人不舒服。重新访问实例/类变量(主要是从控制台),对我来说就像FooClass.class\u variable\u set(:@@foo,'bar'))
和FooClass.class\u variable\u get(:@@foo)
,对于实例foo\u class.instance\u variable\u set(:@foo,'baz')
和foo\u class.instance\u variable\u get(:@foo)
。它们接受符号:@foo
或字符串,@foo'
(感谢engineersmnky的发布。)谢谢兄弟,但不幸的是,这导致了更严重的错误。@VladislavAniskin这不可能导致错误,因为它是正确的(少数之一)访问类变量的方法。@VladislavAniskin您是如何得出这导致了更严重的错误的?您是否尝试过?可能是因为平台。我尝试过,我发现同样的事情/@VladislavAniskin是不可能的,除非您在windows上:D我向您保证,此代码101%正常工作
class TestClass
@@variable = "var"
def self.variable
# Return the value of this variable
@@variable
end
end
p TestClass.variable #=> "var"
class TestClass
@variable = "var"
class << self
attr_accessor :variable
end
end
class TestClass
mattr_accessor :variable
end
class TestClass
@@varible = "var"
class << self
def variable
@@varible
end
end
# above is the same as
# def self.variable
# @@variable
# end
end
TestClass.variable
#=> "var"