我当前的工作目录不在我的 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
这真的很困扰我,因为 require 没有像我想象的那样工作(尽管我是 ruby nuby):
require 'some_file_that_I_know_darn_well_is_in_pwd.rb'
如果我追加'.'
到最后,要求就按我的预期工作了。
我缺少什么?
UPDATE:
嗯!现在我遇到了一个新问题。考虑:
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>'
现在怎么样了?
Ruby 1.9.2 中引入的 Powers明确的改变 http://www.ruby-lang.org/en/news/2010/08/18/ruby-1-9.2-released/这样工作目录就不再位于 Ruby 路径中。我以为这是世界末日,是一件可怕的事情,直到我了解到require_relative
。我的应用程序往往如下所示:
require 'some_gem'
require 'another_gem'
require_relative 'lib/init'
进而lib/init.rb
可以有:
require_relative 'lib1' # this is lib/lib1.rb
require_relative 'lib2' # this is lib/lib2.rb
这是蜜蜂的膝盖,解决了我过去需要不同工作目录中的相同文件时遇到的各种问题。
Edit:不幸的是(由于我不知道也没有调查过的原因)require_relative
不专门在 irb 中工作。为此,您可以:
- 做你最初描述的事情:要么
$: << '.'
or $:.unshift '.'
, or
-
您可以使用load 'myfile.rb'
or 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)