显然,我对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
是一个内核#方法,我不需要像往常一样使用其他语言来保持我的代码。
答案 0 :(得分:2)
此处的问题是'./lib/derived'
文件中的require /lib/base.rb
实际上导致/lib/derived.rb
在Base
中声明/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
的正文中使用。