使用Class.new时访问祖先常量的NameError?

时间:2012-12-09 04:56:22

标签: ruby nameerror

据我所知,使用Class.new定义的Ruby类与使用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进行测试。

1 个答案:

答案 0 :(得分:0)

导致您使用块来定义C类,并且该块的范围是main而不是A

让它发挥作用:

C = Class.new(A)

def C.test
  TEST
end    

或:

class << C
    def test
      TEST
    end    
end