我有从类A派生的类B,如:
class A
..
end
class B < A
...
end
在另一个文件中我定义了一个变量M
M = B
然后我得到错误
"NameError: uninitialized constant B".
我刚发现如果我写
M=A
M=B
那就好了。似乎我必须以某种方式初始化A
由于这些文件与rails没有关系,我们假设它们是系统中任意文件夹中的两个独立文件。假设它们在同一个目录中。
class_def.rb:
class A
def self.talk
puts 'hello'
end
end
class B < A
def self.talk
super()
puts 'world'
end
end
runner.rb:
require './class_def.rb'
M=B
M.talk
调用ruby runner。Rb应该产生输出
hello
world
然而,我注意到同样的错误使用RubyFiddle
调用方法http://rubyfiddle.com/riddles/1d8e2
不调用方法http://rubyfiddle.com/riddles/1d8e2/