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()そのうちの1つで実行すると、そのクラスインスタンス変数がわかります。したがって、メタクラスコンテキストに入る前に、名前でオブジェクトを参照するか、ハンドルを確立する必要があります...

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 に答える