【问题标题】:Accessing Class Variables?访问类变量?
【发布时间】:2010-10-19 20:55:58
【问题描述】:
class Foo
  @@default = "default"

  p instance_variables
  p class_variables

  class << self
    p instance_variables
    p class_variables

    # How do I access the @@default variable here?
  end
end

【问题讨论】:

    标签: ruby class-variables


    【解决方案1】:

    在任何其他地方都采用同样的方式:@@default

    我不确定p .. 应该做什么(Ruby 不是我的母语),但这可行

    class Foo
      @@default = "default"
    
      class << self
        puts "#{@@default}"
      end
    end
    

    【讨论】:

    • p 是一种懒惰的写法puts :P
    • 方法“p”调用#inspect,然后在结果上调用puts()。它更像是一种调试方法,而puts() 是一种通用输出方法。
    • @Nikita,你能解释一下这个类变量是如何在单例类中访问的吗?据我了解单例类和类变量,它不应该是:/
    • @banister 我对 Ruby 的理论知识知之甚少(正如我在答案中所说),但如果你运行上面的代码,你会在控制台看到“默认”。
    • @banister 不过,如果您考虑 Java 中的类似情况(我知道),从静态方法访问静态变量是有意义的。
    【解决方案2】:

    这个问题有点意思,因为它本质上是在问“元类有没有办法引用它的“真实”类?

    据我所知,答案是“否”,因为 Ruby 保留的所有“向上”祖先指针也指向元类,因此在其中一个中运行 class_variables() 会告诉你它的 类实例变量。因此,您必须在进入元类上下文之前按名称引用对象或建立句柄...

    class Foo
      @@default = "default"
      @@me = self
    
      p instance_variables
      p class_variables
    
      class << self
        p instance_variables
        p @@me.class_variables
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-25
      相关资源
      最近更新 更多