1
class MyClass
  @my_class_instance_variable = "here"

  p @my_class_instance_variable # => "here"

  class << self
    p @my_class_instance_variable # => nil
  end
end

class MyClass
  p @my_class_instance_variable # => "here"
end

p3 番目の印刷nil時に2 番目のp印刷が行われるのはなぜ"here"ですか? シングルトン クラス定義 ( class << self) についての私の理解では、それはクラス定義 ( ) と同じスコープを持つということclass MyClassです。

(この質問のタイトルは似ていますが、焦点が異なります。)

4

1 に答える 1

1

シングルトン クラス定義 (class << self) についての私の理解は、それがクラス定義と同じスコープを持っているということです

いいえ。範囲が異なります。@my_class_instance_variableのスコープで定義しましたが、スコープ ifのシングルトン クラスMyClassでアクセスしようとしています。MyClass

次のように簡単に確認できます。

class Foo
  puts self #=> Foo

  class << self
    puts self #=> #<Class:Foo>
  end
end

次の出力で:

Foo
#<Class:Foo>
于 2016-10-18T09:28:15.810 に答える