3
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
4

2 回答 2

2

与您在任何其他地方执行此操作的方式相同:@@default.

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

class Foo
  @@default = "default"

  class << self
    puts "#{@@default}"
  end
end
于 2010-10-19T21:01:06.967 回答
1

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

据我所知,答案是“否”,因为 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
于 2010-10-20T16:42:06.950 回答