【问题标题】:Ruby require "no such file to load" error yet clearly in pathRuby 需要“没有这样的文件来加载”错误但在路径中很明显
【发布时间】:2011-05-01 15:04:27
【问题描述】:

我一直在尝试获取一个 ruby​​ 文件以要求另一个 ruby​​ 文件,但我感觉自己快疯了。我的设置如下

'/raid1/ruby-code/benchmark/'中的两个文件

CommandRunner 基准测试

Benchmarker 是此时的主程序,并且想要使用 CommandRunner,我尝试了很多不同的东西,但没有一个可以工作。以下是我在 Benchmarker 开头放的所有东西的列表

需要'CommandRunner' 需要'./CommandRunner' $LOAD_PATH.unshift File.expand_path(File.dirname($PROGRAM_NAME)) 需要'CommandRunner' $LOAD_PATH.unshift File.expand_path(File.dirname($PROGRAM_NAME)) 需要'./CommandRunner'

我还使用 require_relative 尝试了上述所有排列。我已经尝试将文件加载到 emacs 内部的 irb 中,并且我已经在命令行中尝试过。在 irb 中的某一时刻,它会用

加载一次
require 'CommandRunner'
然后会加载,直到我将它切换回 './CommandRunner' 然后它会再次加载。

我实际上有错误说

`require_relative': 没有要加载的文件 -- /raid1/ruby-code/benchmark/CommandRunner (LoadError)

这是文件的正确路径!

我已经将它切换为加载,并且 似乎 正在工作,我看到了奇怪的行为,但这可能就是我。有谁知道这里会发生什么?

【问题讨论】:

    标签: ruby scripting require load-path


    【解决方案1】:

    文件名是 CommandRunner 而不是 CommandRunner.rb? ruby 文件的标准命名约定是使用小写和下划线,因此即使类名是 CommandRunner,文件也是 command_runner.rb,然后 require 'command_runner' 应该可以工作。

    【讨论】:

    • 文件名是 CommandRunner,我可能会更改它,因为我不确定标准做法是什么,但现在是文件名。
    • 我在文档中找不到明确不支持此功能。如果您将 CommandRunner 更改为 CommandRunner.rb,它会起作用,但我认为它可能是 eval.c 中的一个错误,它没有找到文件 CommandRunner(更糟糕的是,告诉您该文件不存在)。
    • 啊,我想我找到了。来自ruby-doc.org/core/classes/Kernel.html#M005941 "...否则,Ruby 会尝试将.rb'',.so'' 等添加到名称中。"所以这指定如果没有给出扩展名,ruby 将尝试添加有效的扩展名,因此没有指定扩展名。换句话说,如果您需要,任何扩展都被认为是无效的。
    • 这确实是问题所在。我需要训练自己去 ruby​​-doc,就像我用 Lisp 去 Hyperspec 一样。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多