2

load 'file.rb'我对和之间的区别感到困惑require 'Module'。在Learn Ruby the Hard Way 中,如何使用模块的示例设置了两个文件(mystuff.rbapple.rb):

mystuff.rb

module MyStuff
    def MyStuff.apple()
        puts "I AM APPLES!"
    end
end

苹果.rb

require 'mystuff'

MyStuff.apple()

但是,当我apple.rb在 Sublime Text 控制台或使用运行 时ruby apple.rb,我得到一个Load Error. 我也试过require 'MyStuff',和require 'mystuff.rb',但我仍然得到Load Error

所以,我将第一行切换apple.rbload 'mystuff.rb',让它运行。但是,如果我编辑为与 a相对'mystuff.rb'的定义,则没有区别。class MyStuffmodule MyStuff

作为参考,Load Erroris: /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': cannot load such file -- mystuff (LoadError)`

我已经窥视kernel_require.rb并查看了require定义,但由于我是 Ruby Nuby(实际上是编程新手),所以有点不知所措。由于 Learn Ruby the Hard Way 自 2012-10-05 以来一直没有更新,因此模块的语法可能发生了一些变化。是的?

4

2 回答 2

4

require搜索预定义的目录列表,如“require”默认查找的路径是什么?. mystuff.rb它失败了,因为它在任何这些目录中都找不到。

load,另一方面,将在当前目录中查找文件。

至于:

但是,如果我将“mystuff.rb”编辑为类 MyStuff 的定义,而不是模块 MyStuff,则没有区别。

我不确定我理解你所说的“没有区别”是什么意思。如果您的意思是requireandload继续失败和成功,那是有道理的,因为require失败与文件内容的内容无关,并且您正在测试的代码的行为相同,与 Mystuff 是类还是香草无关模块。

于 2014-01-04T23:04:29.330 回答
2

您可以通过更改轻松解决此问题

require 'mystuff'

require_relative './mystuff'
于 2014-01-04T23:17:25.563 回答