7

我是 Ruby 的绝对初学者。我创建了一个小的 ruby​​ 文件,当我运行命令时它运行良好ruby "methods.rb"。这意味着我在正确的目录中。

但是当我启动 irb 并运行命令require "methods.rb"时,我得到以下响应:

LoadError: cannot load such file -- methods.rb
    from /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:53:in `require'
    from /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/core_ext/kernel_require.rb:53:in `require'
    from (irb):1
    from /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'
4

4 回答 4

10

默认情况下,Ruby 不会将当前路径添加到加载路径。

从irb,你可以试试require "./methods.rb"

于 2013-10-02T16:40:45.603 回答
1

so.rb我在目录中确实有一个 ruby​​ 文件/home/kirti/Ruby。所以首先从 IRB 我将使用Dir#chdir方法更改我当前的工作目录。然后我会调用#load#require方法。我的so.rb文件只包含p hello一行。

我会这样:

>> Dir.pwd
=> "/home/kirti"
>> Dir.chdir("/home/kirti/Ruby")
=> 0
>> Dir.pwd
=> "/home/kirti/Ruby"
>> load 'so.rb'
"hello"
=> true
>> require './so.rb'
"hello"
=> true
于 2013-10-02T16:47:40.613 回答
1

要将执行 ruby​​ 脚本的目录添加到加载路径,请使用:

$LOAD_PATH.unshift( File.join( File.dirname(__FILE__), '' ) ) 

或者如果您已将依赖项放在当前目录的“子目录”中:

$LOAD_PATH.unshift( File.join( File.dirname(__FILE__), 'subdir' ) ) 
于 2013-10-02T17:42:15.923 回答
1

如果您要在 IRB 中加载当前目录中的内容,您可以执行以下操作:

irb -I.

注意那里的“点”,表示当前目录。

如果您在 IRB 中浏览和更改该文件,请使用load而不是`requireasload让您加载更改,并且require只允许需要该文件一次。这意味着您无需退出 IRB 即可查看您的更改是如何受到影响的。

要了解 IRB 有哪些选项,irb --help如果您正在学习该工具,您可以做哪些事情是好的。

于 2013-10-02T18:18:02.483 回答