1

私の現在の知識では、で定義されたRubyクラスは、キーワードClass.newで作成されたクラスと異なるべきではありません。classでは、なぜ次のクラスBとCの動作が異なるのでしょうか。

class A
  TEST = 'A'   
  def test
    TEST
  end   
end

class B < A
 def test
  TEST
 end    
end

C = Class.new(A) {        
 def test
  TEST
 end    
}

puts 'A: ' + A.new.test # => "A: A"
puts 'B: ' + B.new.test # => "B: A"
puts 'C: ' + C.new.test # => uninitialized constant TEST (NameError)

ruby1.9.3p327およびruby1.8.7p358でテスト済み。

4

1 に答える 1

0

クラスを定義するためにブロックを使用するCと、そのブロックのスコープはmain代わりになりますA

それを機能させるには:

C = Class.new(A)

def C.test
  TEST
end    

また:

class << C
    def test
      TEST
    end    
end
于 2012-12-09T04:59:11.753 に答える