为什么我的Ruby路径上没有当前目录?

JnB*_*ymn 35 ruby irb

有没有理由说我目前的工作目录不在我的Ruby路径上?

考虑:

~:499$ irb
ruby-1.9.2-p136 :002 > puts $:
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/x86_64-darwin10.6.0
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin10.6.0
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1
/Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/x86_64-darwin10.6.0
 => nil 
Run Code Online (Sandbox Code Playgroud)

这真的很困扰我,因为需要不起作用,因为我认为它会(虽然我是一个红宝石的nuby):

require 'some_file_that_I_know_darn_well_is_in_pwd.rb'
Run Code Online (Sandbox Code Playgroud)

如果我追加'.'到最后,则需求按照我的预期运行.

我错过了什么?


更新:

精氨酸!现在我遇到了一个新问题.考虑:

ruby-1.9.2-p136 :010 > `ls`
 => "start.rb\n" 
ruby-1.9.2-p136 :011 > require_relative 'start'
LoadError: cannot infer basepath
    from (irb):11:in `require_relative'
    from (irb):11
    from /Users/mrberryman/.rvm/rubies/ruby-1.9.2-p136/bin/irb:16:in `<main>'
Run Code Online (Sandbox Code Playgroud)

现在怎么了?

Phr*_*ogz 75

在Ruby 1.9.2中,Power引入了一个显式更改,以便工作目录不再位于Ruby路径中.在我了解之前,我认为这是天启和可怕的事情require_relative.我的应用程序看起来像这样:

require 'some_gem'
require 'another_gem'
require_relative 'lib/init'
Run Code Online (Sandbox Code Playgroud)

然后lib/init.rb可以有:

require_relative 'lib1' # this is lib/lib1.rb
require_relative 'lib2' # this is lib/lib2.rb
Run Code Online (Sandbox Code Playgroud)

它是蜜蜂的膝盖,解决了我以前遇到的各种问题,需要来自不同工作目录的相同文件.

编辑:不幸的是(由于我不知道并且没有调查过的原因)require_relative在irb中不起作用.为此你可以:

  1. 做你最初描述的:$: << '.'或者$:.unshift '.',或者
  2. 你可以使用load 'myfile.rb'require './myfile'代替:

    irb(main):001:0> Dir['*.rb']
    => ["a.rb", "bar.rb", "foo.rb", "prime.rb", "tmp.rb"]
    
    irb(main):002:0> require 'a'
    LoadError: no such file to load -- a
      from <internal:lib/rubygems/custom_require>:29:in `require'
      from <internal:lib/rubygems/custom_require>:29:in `require'
      from (irb):2
      from /usr/local/bin/irb:12:in `<main>'
    
    irb(main):003:0> require_relative 'a'
    LoadError: cannot infer basepath
      from (irb):3:in `require_relative'
      from (irb):3
      from /usr/local/bin/irb:12:in `<main>'
    
    irb(main):004:0> load 'a.rb'
    a
    => true
    
    irb(main):005:0> require './a'
    a
    => true
    
    Run Code Online (Sandbox Code Playgroud)

  • @Jörg这解释了工程"为什么",但没有解释用户"为什么"_"嘿,你怎么把IRB视为当前目录中的文件,mmkay?"_ (6认同)