ruby - 具有类继承的错误未初始化常量

标签 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 是一个 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.rbrequire './lib/base' 在技术上没有必要,因为它实际上已成功包含在lib/derived.rb,但如果在 lib/main.rb 的主体中直接使用 Base 是一种很好的形式。

关于ruby - 具有类继承的错误未初始化常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929525/

相关文章:

ruby - 无法捕获 Ruby 中的异常

ruby - 500 的未定义方法 'reverse'

java - 在 jar 中运行类时从 jar 中获取所有 .class

c++ - 初始化类的常量字符指针

oop - 帮我命名我的类(class)

c++ - 多层上的模板化类未知类型

Ruby:删除哈希中具有特定值的所有键值对

ruby - 用反斜杠单引号替换单引号

c++ - 在单继承的情况下,C++ 是否保证 Base 子对象的地址与其 Derived 对象的地址相同?

c++ - 将方法参数类型更改为子类中的派生类