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)

使用 ruby​​ 1.9.3p327 和 ruby​​ 1.8.7p358 进行测试。

4

1 回答 1

0

导致您使用块来定义C类,并且该块的范围mainA

让它工作:

C = Class.new(A)

def C.test
  TEST
end    

或者:

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