使用类继承错误未初始化的常量

时间:2016-04-29 04:25:44

标签: ruby class inheritance

显然,我对ruby中的理解有所了解。我有3个ruby文件main,base和derived。我有两个课程Derived专门来自Base

/bin/main.rb

require './lib/base'

/lib/base.rb

require './lib/derived'
class Base

end

/lib/derived.rb

require './lib/base'
class Derived < Base

end

使用rake ruby './bin/main.rb'

运行
 `<top (required)>': uninitialized constant Base (NameError)

导致错误的原因是什么?

编辑:    我刚刚意识到我遗漏的一点是我忘了require是一个内核#方法,我不需要像往常一样使用其他语言来保持我的代码。

1 个答案:

答案 0 :(得分:2)

此处的问题是'./lib/derived'文件中的require /lib/base.rb实际上导致/lib/derived.rbBase中声明/lib/base.rb之前被解析。试试这个,而不是:

/bin/main.rb

require './lib/base'
require './lib/derived'

puts 'Success!'

/lib/base.rb

class Base

end

/lib/derived.rb

require './lib/base'
class Derived < Base

end

这允许声明以正确的顺序发生。

作为旁注,require './lib/base'中的lib/main.rb在技术上并不是必需的,因为它实际上已成功包含在lib/derived.rb中,但如果Base它是好的形式直接在lib/main.rb的正文中使用。