很明显,我对 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
是一个 Kernel#method,我不需要像通常使用其他语言那样每次都掌握我的代码。
最佳答案
这里的问题是 /lib/base.rb
文件中的 require './lib/derived'
实际上导致了 /lib/derived在
。试试这个,而不是:/lib/base.rb
中声明 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
这允许声明以正确的顺序发生。
作为旁注,在 lib/main.rb
中 require './lib/base'
在技术上没有必要,因为它实际上已成功包含在lib/derived.rb
,但如果在 lib/main.rb
的主体中直接使用 Base
是一种很好的形式。
关于ruby - 具有类继承的错误未初始化常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929525/