Ruby - NameError:访问派生类名称时的未初始化常量

时间:2013-03-12 17:39:17

标签: ruby reflection

我的B级派生自A类,如:

class A
..
end

class B < A
...
end

在另一个文件中,我定义了一个变量M

M = B

然后我收到了错误

"NameError: uninitialized constant B".

我刚发现如果我写

M=A
M=B

然后没关系。我似乎必须以某种方式初始化A.

1 个答案:

答案 0 :(得分:0)

由于文件与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/