attr_accessor 用于类问题

发布于 2024-09-18 22:59:51 字数 234 浏览 5 评论 0原文

我认为可以在特征类中定义 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧情勿念 2024-09-25 22:59:51

添加到类中的 attr_accessor 使用类级实例变量,而不是类变量。在某些情况下,这实际上会更有帮助,因为当继承出现时,类变量可能会变得荒谬。

class IOS
  @modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end
end

puts IOS::modules_paths # outputs "hello"

如果您确实需要它使用类变量,您可以手动定义方法,引入 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.

class IOS
  @modules_paths = "hello"

  class << self
    attr_accessor :modules_paths
  end
end

puts IOS::modules_paths # outputs "hello"

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.

葬花如无物 2024-09-25 22:59:51

您永远不会调用 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 thus IOS.modules_paths returns an unitialized variable. In Ruby, uninitialized variables evaluate to nil and puts nil prints nothing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文