当我确实需要irb中的'./primes.rb‘时,我会得到这样的结果:
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任何关于如何让它工作的建议都将不胜感激!
当我确实需要relative时,它会给我这样的结果:
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 > 当我在pry中尝试它时:
[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'发布于 2013-05-08 02:46:11
试试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,在那里您可以测试和调试您的方法。没有它我活不下去。
发布于 2013-05-08 02:50:38
与ruby 1.8不同,您不能要求同一文件夹中有一个文件,因为当前文件夹不再位于加载路径中。
要模拟ruby1.8的行为,您可以尝试
$LOAD_PATH << "."
require 'primes.rb'然而,正如@CharlesCaldwell指出的那样,在Ruby1.9中正确的做法是使用relative_require。
以下是处理此问题的最佳方法的good discussion。
请注意,relative_require 在irb中不起作用。你可以在@CharlesCaldwell answer上查看动机。
但是在你的任务问题中,你不应该使用irb,你应该使用pry:
我们将使用两个宝石。,
。一种称为Pry,它是irb的替代品。你得先装上撬。使用Pry并不是调试所必需的,但它会让你的生活更美好。
以下是使用relative require的示例:
[fotanus@thing ~]$ 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
[fotanus@thing ~]$ cat a.rb
require_relative 'primes.rb'
[fotanus@thing ~]$ ruby a.rb https://stackoverflow.com/questions/16426279
复制相似问题