Ruby 元编程 : Initialize singleton_class variable

标签 ruby singleton initialization var

  • 为什么 Foo.val 在调用 Foo.set 之前返回 nil 而不是 "foo"
  • 是否有任何机制可以在类评估时初始化 @val
  • @val = "foo" 存储在哪个范围内?

    class Foo
      class << self
        @val  = "foo"
        attr_reader :val
    
        def set(val)
          @val = val
        end
      end
    end
    
    p Foo.val # nil
    Foo.set("bar")
    p Foo.val # "bar"
    

最佳答案

您可以像这样在 Foo 中初始化 @val:

class Foo
  @val  = "foo"
  class << self
    attr_reader :val

    def set(val)
      @val = val
    end
  end
end

p Foo.val         #=> "foo"
Foo.set("bar")
p Foo.val         #=> "bar"

您的代码不是在 Foo 上而是在 Foo 的元类上初始化 @val

关于Ruby 元编程 : Initialize singleton_class variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968333/

相关文章:

perl - 在 Perl 中如何按列表分配进行字数统计?

ruby - 如何将电子表格 "letternamed"列坐标转换为整数?

ruby-on-rails - 克隆记录并将远程文件复制到新位置?

ruby - 从 ruby 新手返回命令

javascript - Ruby on Rails 筹款进度条

ios - 类方法单例对象可以响应委托(delegate)调用吗?

asp.net-core - 如何在单例服务中使用数据库上下文?

Java:使单例不那么冗长

c++ - 在初始化中使用新声明的变量(int x = x+1)?

ios - 我如何以及在何处初始化 Xcode 5 中的全局 NSMutableArray