Ruby:即使文件未加载, 'require' 也会返回 false

标签 ruby require

我有这个代码:

puts require './item'
puts $"

class Light < Item
  #code
end
item.rb 中的

Item 类:

require './v3d'
require './ray'

class Item
  attr_accessor :pos 

  def initialize(pos)
    @pos = pos
  end

  def check(pos, dir)
    return nil
  end

  def normal(ray)
    return nil
  end
end

当我运行我的程序时打印这个输出:

false
enumerator.so
thread.rb
rational.so
complex.so
/usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/encdb.so
/usr/lib/x86_64-linux-gnu/ruby/2.3.0/enc/trans/transdb.so
/usr/lib/ruby/2.3.0/unicode_normalize.rb
/usr/lib/x86_64-linux-gnu/ruby/2.3.0/rbconfig.rb
/usr/lib/ruby/2.3.0/rubygems/compatibility.rb
/usr/lib/ruby/2.3.0/rubygems/defaults.rb
/usr/lib/ruby/2.3.0/rubygems/deprecate.rb
/usr/lib/ruby/2.3.0/rubygems/errors.rb
/usr/lib/ruby/2.3.0/rubygems/version.rb
/usr/lib/ruby/2.3.0/rubygems/requirement.rb
/usr/lib/ruby/2.3.0/rubygems/platform.rb
/usr/lib/ruby/2.3.0/rubygems/basic_specification.rb
/usr/lib/ruby/2.3.0/rubygems/stub_specification.rb
/usr/lib/ruby/2.3.0/rubygems/util/list.rb
/usr/lib/x86_64-linux-gnu/ruby/2.3.0/stringio.so
/usr/lib/ruby/2.3.0/rubygems/specification.rb
/usr/lib/ruby/2.3.0/rubygems/exceptions.rb
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_gem.rb
/usr/lib/ruby/2.3.0/monitor.rb
/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb
/usr/lib/ruby/2.3.0/rubygems.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/version.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/core_ext/name_error.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/levenshtein.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/jaro_winkler.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkable.rb
/usr/lib/ruby/2.3.0/delegate.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/name_error_checkers.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/method_name_checker.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/spell_checkers/null_checker.rb
/usr/lib/ruby/vendor_ruby/did_you_mean/formatter.rb
/usr/lib/ruby/vendor_ruby/did_you_mean.rb
/home/<user>/Documents/ruby/ray/write_ppm.rb
/home/<user>/Documents/ruby/ray/v3d.rb
/home/<user>/Documents/ruby/ray/pixel.rb
/home/<user>/Documents/ruby/ray/image.rb
/home/<user>/Documents/ruby/ray/material.rb

然后抛出:

/home/<user>/Documents/ruby/ray/light.rb:4:in `<top (required)>': uninitialized constant Item (NameError)

当调用 require './item' 时,没有错误并且返回 false。根据我对 require 工作原理的理解,程序似乎错误地认为它不需要加载 item.rb。为什么会发生这种情况,我该如何解决?

编辑:扩展了一些代码

最佳答案

作为一个通用的答案,与操作无关,但因为我有一个类似的问题,被搜索引擎指向这里。

基本上 require 'http' 在未加载 gem 时返回 false。

我发现加载路径中有一个 http.rb 文件,它正在加载而不是标准 gem。因此,请仔细检查库加载路径和 gem 名称下的 ruby​​ 文件的文件名是否存在冲突。

关于Ruby:即使文件未加载, 'require' 也会返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41603413/

相关文章:

ruby - 如何让 ruby​​ 的 xmlrpc 客户端忽略 SSL 证书错误?

ruby-on-rails - 运行 Rake 测试时出现 404 错误

ios - 如何在 calabash ios 中通过标题标签查找 UIButton?

javascript - Nodejs require 未全局加载对象

Node.js - 要求未定义异常

php - 在 php 中真正需要做什么

ruby-on-rails - Ruby 比较两个字符串相似度百分比

ruby - 如何将 html 颜色名称转换为 Ruby 中的 RGB 值?

javascript - 使用 commonjs 模式跨 couchdb View 重用函数

c++ - 为什么使用无效概念被视为格式错误