2

load 'file.rb'との違いについて混乱していrequire 'Module'ます。Learn Ruby the Hard Wayでは、モジュールの使用方法の例が 2 つのファイル (mystuff.rbおよびapple.rb)でセットアップされています。

mystuff.rb

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

apple.rb

require 'mystuff'

MyStuff.apple()

ただし、apple.rbSublime Text コンソールまたは を使用してを実行するとruby apple.rbLoad Error. require 'MyStuff'、およびも試しrequire 'mystuff.rb'ましたが、まだLoad Error.

apple.rbそこで、 の最初の行をに切り替えて、load 'mystuff.rb'実行できるようにしました。ただし、 ではなく の定義になるように編集し'mystuff.rb'ても、違いはありません。class MyStuffmodule MyStuff

参考までに、 require' Load Error: /Users/David/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in 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デフォルトで「必要」に検索されるパスは何ですか? で説明されているように、定義済みのディレクトリのリストを検索します。. mystuff.rbこれらのディレクトリのいずれにも が見つからないため、失敗しています。

load一方、現在のディレクトリでファイルを探します。

はどうかと言うと:

ただし、「mystuff.rb」を編集して、モジュール MyStuff ではなくクラス MyStuff の定義にすると、違いはありません。

「変わらない」という言葉の意味がよくわかりません。requireと がそれぞれ失敗し、成功しload続けることを意味する場合、require失敗はファイルの内容とは無関係であり、テストしているコードは Mystuff がクラスであるかバニラであるかに関係なく同じように動作するため、それは理にかなっていますモジュール。

于 2014-01-04T23:04:29.330 に答える
2

これを変更することで簡単に解決できます

require 'mystuff'

require_relative './mystuff'
于 2014-01-04T23:17:25.563 に答える