2012-12-09 40 views
1

到我目前所知的使用Class.new定義的Ruby類應該與使用class關鍵字創建的類不應該不同。那麼爲什麼下面的類B和C的行爲不同?使用Class.new時訪問祖先常量的NameError?

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) 

測試紅寶石1.9.3p327和紅寶石1.8.7p358。

+1

我沒有得到錯誤與紅寶石1.9.2p180(2011-02-18修訂版30909)[i386-darwin9.8.0]。但是Ruby的常量範圍可能非常微妙。 –

回答

0

因爲你一個使用塊定義C類,並且該塊的範圍是main而不是A

有它的工作:

C = Class.new(A) 

def C.test 
    TEST 
end  

或:

class << C 
    def test 
     TEST 
    end  
end 
+0

這很快。謝謝,slivu! – PDG