我对 load 'file.rb'
和 require 'Module'
之间的区别感到困惑。在 Learn Ruby the Hard Way ,如何使用一个模块的例子是用两个文件(mystuff.rb
和 apple.rb
)设置的:
我的东西.rb
module MyStuff
def MyStuff.apple()
puts "I AM APPLES!"
end
end
苹果.rb
require 'mystuff'
MyStuff.apple()
但是,当我在 Sublime Text 控制台中或使用 ruby apple.rb
运行 apple.rb
时,我收到了一个加载错误
。我也尝试过 require 'MyStuff'
和 require 'mystuff.rb'
,但我仍然遇到 Load Error
。
因此,我将 apple.rb
的第一行切换为 load 'mystuff.rb'
,这样它就可以运行了。但是,如果我将 'mystuff.rb'
编辑为 class MyStuff
的定义而不是 module MyStuff
,则没有区别。
作为引用,加载错误
是:
/Users/David/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in
require': 不能加载这样的文件 -- mystuff (LoadError)`
我查看了 kernel_require.rb
并查看了 require
定义,但由于我是 Ruby Nuby(实际上是编程新手),它是有点压倒性。由于从 2012 年 10 月 5 日起就没有更新过 Learn Ruby the Hard Way,因此可能对模块进行了一些语法更改。是吗?
最佳答案
require
搜索预定义的目录列表,如 What are the paths that "require" looks up by default? 中所述。 .它失败了,因为它无法在任何这些目录中找到 mystuff.rb
。
load
将在当前目录中查找文件。
至于:
However, if I edit 'mystuff.rb' to be a definition of class MyStuff as opposed to a module MyStuff, there is no difference.
我不确定我是否理解您所说的“无差异”是什么意思。如果您的意思是 require
和 load
分别继续失败和成功,那是有道理的,因为 require
失败与内容无关无论 Mystuff 是类还是普通模块,文件内容和您正在测试的代码的行为都相同。
关于ruby - 加载 'file.rb' 与在 Ruby 中需要 'Module',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20927771/