【问题标题】:Ruby require_relative not loading file, not throwing errorRuby require_relative 不加载文件,不抛出错误
【发布时间】:2013-10-12 01:57:37
【问题描述】:

我无法通过外部文件加载常量定义。我已将问题缩小到以下几点。

require_relative '../../common/config.rb'
A_CONSTANT = 'something'

puts "A_CONSTANT: #{A_CONSTANT}"

当我按照书面方式运行时,它会正确打印消息。相同的常量在文件 common/config.rb 中声明。相对路径对于该文件的位置是正确的。为了完整起见,上面的代码在 /watir/dashboard/spec/ex.rb 中。常量在 /watir/common/config.rb 中声明。

在我看来,上面的代码应该会因为重复的常量声明而出错。它不是。如果我注释掉上面的常量声明并重新运行,puts 语句会显示“未初始化常量”的错误。有什么想法吗?

编辑 - 文件 common/config.rb 的内容如下。

A_CONSTANT = 'something'

突然,我把文件名改成了 common/conf.rb。当我修改 require_relative 语句以加载重命名的文件时,我得到了我最初预期的结果。文件被加载,第二个常量声明抛出一个警告说“已经初始化常量”。如果我注释掉第二个声明,脚本就会完美运行。

当通过相对路径加载时,文件名“config.rb”似乎有些特殊。我在其他脚本中使用了该文件名,它与加载脚本或子文件夹位于同一文件夹中。这是我第一次不得不向上移动来加载它。

【问题讨论】:

  • 显示该常量在config.rb中是如何定义的?
  • 这个'../../在做什么?
  • 除非 Ruby 是特殊的,'..' 表示在文件夹树中上一层。所以 '../../common' 应该上到 watir 文件夹,然后下到 watir/common 文件夹。

标签: ruby constants require


【解决方案1】:

Ruby 允许重新定义常量,并且只会打印警告。 Ruby 中的某些设置只是对您隐藏了该警告。

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多