【发布时间】:2015-07-06 23:53:45
【问题描述】:
This SO post 声称require 将仅搜索相对于脚本运行所在的路径来回答问题。但这确实不是似乎是真的。我会详细说明。
我创建了一个快速的 C 扩展并将其编译为 mytest.so。然后,在同一个目录中,我启动了irb。
irb(main):009:0> require 'mytest.so'
LoadError: cannot load such file -- mytest.so
这是意料之中的,因为另一个答案中的声明是 require 正在搜索相对于运行 irb 的位置。在我的情况下,那将是/usr/bin/irb。所以我尝试了另一个问题的required_relative 解决方案:
irb(main):006:0> require_relative './mytest.so'
LoadError: cannot infer basepath
运气不好。仅供参考 - mytest.so 在这里完成制表符,所以 irb 清楚地知道它在当前工作目录中。此外,我可以很容易地证明这一点:
irb(main):004:0> system("pwd")
/home/mike/Documents/ruby_test
# => true
irb(main):005:0> File.expand_path("./")
# => "/home/mike/Documents/ruby_test"
好的最终测试,我假设irb 正在/usr/bin 中执行尽管有证据表明这一点。
irb(main):011:0> require '../../home/mike/Documents/ruby_test/mytest.so'
LoadError: cannot load such file -- ../../home/mike/Documents/ruby_test/mytest.so
如果有人能阐明require 的情况,我将不胜感激?
顺便说一句,我知道我可以通过提供确切的文件路径解决这个问题。这个问题是关于尝试了解表面之下发生的事情。
require '/home/mike/Documents/ruby_test/mytest.so' # this works
【问题讨论】:
-
我在猜测,但我认为您获得了接近投票,因为声明和意见“如此令人困惑”,但如果您删除它或将其更改为令人困惑,而不是一般莫名其妙,那么它不再是一个意见...... :)
-
@vgoff 感谢您的建议,我删除了那部分
-
我很好奇
require './mytest.so是否有效?这通常适用于 irb。
标签: ruby