据我所知,使用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进行测试。
答案 0 :(得分:0)
导致您使用块来定义C
类,并且该块的范围是main
而不是A
让它发挥作用:
C = Class.new(A)
def C.test
TEST
end
或:
class << C
def test
TEST
end
end