6

irbを実行するときにソースコードファイルを含めようとしていますが、irbがそれを見つけることができません。

たとえば、ターミナルの次のディレクトリにいるとします。

/dan/rubyapp/

/ dan /rubyapp/に「firstapp.rb」という名前のファイルがあるとします。

irbを起動し、irbプロンプトから次のように入力します

> require "firstapp.rb"

しかし、ファイルが見つかりません。「Dir.pwd」と入力すると、次のように表示されます

/dan/rubyapp/

「require」を機能させる唯一の方法は、そのようにフルパスを含めるかどうかです。

> require "/dan/rubyapp/firstapp.rb"

これを機能させる唯一の方法はそれですか?私がオンラインで見るすべてのチュートリアルは単に「requirefile_name」を実行するので、それが機能すると思いました。


これが$からの出力です:irbで

ruby-1.9.2-p0 > $:
 => ["/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/bin", 
"/Users/Daniel/.rvm/gems/ruby-1.9.2-p0/gems/wirble-0.1.3/lib", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/site_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.4.0", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/vendor_ruby", 
"/Users/Daniel/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1",     
"/Users/Daniel/.rvm/rubies/ruby-
1.9.2-p0/lib/ruby/1.9.1/x86_64-darwin10.4.0"] 
4

2 に答える 2

8

問題は、現在の作業ディレクトリがパスに存在しないことです(Ruby 1.9.2以降)。この問題を回避するには、いくつかの方法があります。

1)rubyファイル自体では、requireの代わりにrequire_relativeメソッドを使用できます。これにより、require_relativeメソッドを含むファイルの場所に関連するファイルがロードされます:http: //extensions.rubyforge.org/rdoc/classes/Kernel.html

require_relative 'firstapp.rb'

ただし、これはirbでは機能しません。

2)他のオプションは、requireメソッドへの引数に現在のパスを含めることです。これは、irbまたはrubyファイルで機能します。例えば:

require './firstapp.rb'

これがrubyに実装された理由は、パス内の異なるディレクトリに同じ名前の異なるファイルがある場合に、誤って間違ったファイルを要求しないようにするためです(* nixがパスに現在のディレクトリ「。」を含めない場合と同様)。

于 2011-01-18T21:54:48.890 に答える
2

試すべきことがいくつかあります:

1)requireの最後から.rbを削除して、次のようにします。

require 'firstapp'

通常、.rbをrequireに追加することはありません(ロードにのみ)-詳細については、こちらをご覧ください: http ://www.fromjavatoruby.com/2008/10/require-vs-load.html

2)それができない場合は、現在のディレクトリがロードパス上にあることを確認してください-irbで次を実行します。

 p $:

ルビーのロードパスが出力されます。「。」のエントリを確認してください。(私のものが最後のエントリです)

于 2010-09-21T10:43:40.610 に答える