2013-05-07 75 views
0

'./primes.rb' 当我需要 './primes.rb' 在IRB我得到这个:LoadError上需要终端

1.9.3-p392 :004 > require './primes.rb' 
LoadError: cannot load such file -- ./primes.rb 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from (irb):4 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>' 

这里是primes.rb文件:

# primes.rb 
require 'debugger' 

def prime?(num) 
debugger 
    (1..num).each do |i| 
    if (num % i) == 0 
     return false 
    end 
    end 
end 

def primes(num_primes) 
    ps = [] 
    num = 1 
    while ps.count < num_primes 
    primes << num if prime?(num) 
    end 
end 

if __FILE__ == $PROGRAM_NAME 
    puts primes(100) 
end 

任何有关如何得到这个工作的建议将不胜感激!

当我确实需要相对它给了我这样的:

1.9.3-p392 :010 > require_relative 'primes.rb' 
LoadError: cannot infer basepath 
    from (irb):10:in `require_relative' 
    from (irb):10 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>' 

当我这样做在它下面的第二个解决方案给了我这样的:

1.9.3-p392 :013 > $LOAD_PATH << "." 
=> ["/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/x86_64-darwin11.4.2", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/vendor_ruby/1.9.1", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/vendor_ruby/1.9.1/x86_64-darwin11.4.2", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/vendor_ruby", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1", "/Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/x86_64-darwin11.4.2", "."] 
1.9.3-p392 :014 > require 'primes.rb' 
LoadError: cannot load such file -- primes.rb 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
    from (irb):14 
    from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>' 
1.9.3-p392 :015 > 

当我尝试在撬:

[4] pry(main)> require_relative 'primes.rb' 
LoadError: cannot infer basepath 
from (pry):2:in `require_relative' 
[5] pry(main)> require 'primes.rb' 
LoadError: cannot load such file -- primes.rb 
from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
[6] pry(main)> .ls 
Applications  Movies   git-completion.bash 
Desktop   Music   rails_projects 
Documents  Pictures  ruby 
Downloads  Public   runwithfriends 
Dropbox   code   shopify 
Library   dev   sites 
[7] pry(main)> require 'ruby/app_acad_mini_curriculum/debugging/primes.rb' 
LoadError: cannot load such file -- ruby/app_acad_mini_curriculum/debugging/primes.rb 
from /Users/RBonhardt/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 
+0

请您问题修剪下来的合理的大小。例如,绝对不需要发布'primes.rb'的源代码。由于它甚至没有找到*,所以错误不可能存在于那里。此外,您还没有在文件'primes.rb'是否确实存在以及它是否位于您认为它在的目录中给出任何提示。 – 2013-05-07 21:13:32

回答

0

尝试require_relative

require_relative 'primes.rb' 

编辑: 请注意,这将只能在脚本内工作。如果您要将此脚本require转换为irb会话,则需要提供primes.rb的完整路径。原因是irb的位置在哪里。例如,在irb中尝试Dir.pwd,您会看到require_relative正试图搜索primes.rb

有几个事情可以做:

# Just need to require the one file. 
require_relative File.join('users', 'yourusername', 'prime_folder', 'prime.rb') 

# Many files in the same folder 
$LOAD_PATH << File.join('users', 'yourusername', 'prime_folder') 
require 'prime.rb' 
require 'another_file.rb' 

另一种选择,一个是我用的,是Pry。它就像irb,很容易从脚本中调用。这是一个宝石如此:

gem install pry 

在脚本的末尾,你可以这样做:

if $0 == __FILE__ 
    require 'pry' 
    binding.pry 
end 

你可以这样落入像REPL的IRB在那里你可以测试和调试方法。没有它我就无法生存。

+0

当我尝试此操作时,我更新了以上结果吗?还有其他建议吗? – 2013-05-07 19:06:22

+0

这是因为你试图要求它在irb中。我正在寻找一个可能的解决方案。 – 2013-05-07 19:07:23

+0

谢谢。我真正想做的是完成这个练习:https://github.com/appacademy/prep-work/blob/master/mini-curriculum/debugging/debugger.md – 2013-05-07 19:13:36

0

不像红宝石1.8,你不能要求在同一个文件夹中的文件,因为当前文件夹不再处于加载路径上。

为了模拟红宝石1.8的行为,你可以尝试

$LOAD_PATH << "." 
require 'primes.rb' 

但是,正确的方式在Ruby 1.9的做,因为@CharlesCaldwell指出,使用relative_require。

这是一个good discussion的最佳处理方法。

请注意,relative_require不适用于irb。你可以检查@CharlesCaldwell答案的动机。

但看在你的任务的问题,你不应该使用内部评级法,你应该使用撬:

We're going to use two gems. One is called Pry, which is a replacement for irb. You'll have to gem install pry. It's not essential for debugging that you use Pry, but it will make life nicer.

下面是使用一个例子相对要求:

[[email protected] ~]$ cat primes.rb 
# primes.rb 

def prime?(num) 
    (1..num).each do |i| 
    if (num % i) == 0 
     return false 
    end 
    end 
end 

def primes(num_primes) 
    ps = [] 
    num = 1 
    while ps.count < num_primes 
    primes << num if prime?(num) 
    end 
end 

if __FILE__ == $PROGRAM_NAME 
    puts primes(100) 
end 
[[email protected] ~]$ cat a.rb 
require_relative 'primes.rb' 
[[email protected] ~]$ ruby a.rb 
+0

当我尝试这个时,我更新了上面的结果。还有其他建议吗?谢谢 – 2013-05-07 19:06:45

+0

@RyanBonhardt更新了我的答案 - 任何改变,你是否使用irb? – fotanus 2013-05-07 19:15:13

+0

是的,我是。真正我所要做的就是完成这个练习:https://github.com/appacademy/prep-work/blob/master/mini-curriculum/debugging/debugger.md我应该在irb中运行它吗? – 2013-05-07 19:21:59