attr_accessor 用于类问题
我认为可以在特征类中定义 attr_accessor 方法,如下所示:
class IOS
@@modules_paths = "hello"
class << self
attr_accessor :modules_paths
end
end
puts IOS::modules_paths
但这不会返回任何内容。
有办法做到吗?
I thought it was possible to define attr_accessor methods in a eigenclass like this:
class IOS
@@modules_paths = "hello"
class << self
attr_accessor :modules_paths
end
end
puts IOS::modules_paths
But this returns nothing.
Is there a way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
添加到类中的
attr_accessor
使用类级实例变量,而不是类变量。在某些情况下,这实际上会更有帮助,因为当继承出现时,类变量可能会变得荒谬。如果您确实需要它使用类变量,您可以手动定义方法,引入 ActiveSupport 并使用
cattr_accessor
,或者只是 复制相关的 ActiveSupport 方法。The
attr_accessor
you add to the class uses class-level instance variables, not class variables. This can actually be more helpful in some cases, since class variables can get ridiculous when inheritance enters the picture.If you really need it to use class variables, you can define the methods manually, pull in ActiveSupport and use
cattr_accessor
, or just copy the relevant ActiveSupport methods.您永远不会调用 IOS::modules_paths= setter 方法,也不会在任何地方分配给相应的
@modules_paths
实例变量。因此,@modules_paths 是单位化的,因此 IOS.modules_paths 返回一个单位化的变量。在 Ruby 中,未初始化的变量计算结果为 nil,并且 puts nil 不打印任何内容。You never call the
IOS::modules_paths=
setter method, nor do you assign to the corresponding@modules_paths
instance variable anywhere. Therefore,@modules_paths
is unitialized and thusIOS.modules_paths
returns an unitialized variable. In Ruby, uninitialized variables evaluate tonil
andputs nil
prints nothing.