В настоящее время я читаю о модулях в книге «Хорошо заземленный рубист» Дэвида Блэка. Как я следовать к упражнению, я натыкаюсь на ошибку при попытке выполнить следующий код:kernel_require.rb: 54: in 'require' (LoadError) из книги Well Grounded Rubyist
# stacklike.rb
module Stacklike
def stack
@stack ||= []
end
def add_to_stack(obj)
stack.push(obj)
end
def take_from_stack
stack.pop
end
end
# stack.rb
require "stacklike"
class Stack
include Stacklike
end
s = Stack.new
s.add_to_stack("item one")
s.add_to_stack("item two")
s.add_to_stack("item three")
puts "Objects currently on the stack: "
puts s.stack
taken = s.take_from_stack
puts "Removed this object: "
puts taken
puts "Now on stack: "
puts s.stack
И когда я запускаю программу, $ ruby stack.rb
, я получаю следующее сообщение об ошибке:
/Users/myName/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in 'require': cannot load such file -- stacklike (LoadError) from /Users/myName/.rvm/rubies/ruby-2.2.0/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in 'require' from stack.rb:2:in '<main>'
так, проведя некоторое время на StackOverflow и имеющий подобную проблему этого пользователя - The #require method in modules mix-ins - Я попытался изменить: require "stacklike"
к require "./stacklike"
, но это не сработало, так что я попробовал этот:
require_relative "stacklike"
require "***I put the absolute path to the file here***"
но без успеха. Затем я посмотрел здесь: no such file to load -- rubygems (LoadError), И, кажется, что у меня есть две версии рубин ... я побежал: $ which -a ruby
, и получил следующий результат:
/Users/myName/.rvm/rubies/ruby-2.2.0/bin/ruby
/usr/bin/ruby
Я думаю Rubygems & две версии рубин влияют места поиска пути/загрузки при использовании «require». Теперь мне интересно, нужно ли мне удалить одну версию или мне нужны оба. Я запускаю OS X Yosemite (10.10.2), и когда я запускаю ruby -v
, я получаю: ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]
Нужны ли мне обе версии? Если мне нужно удалить одну рубиновую версию, которую я должен удалить и как? Я старался быть настолько тщательным, насколько это возможно, дайте мне знать, какую другую информацию нужно предоставить.
Edit 1: Да, оба файла (stack.rb, stacklike.rb) находятся в том же каталоге
Edit 2: Я попытался с помощью require_relative "stacklike", но он не работает. Я также попытался удалить gem & ruby из usr/bin, но успеха там не было - я все равно получаю ту же ошибку загрузки.
Редактировать 3: После запуска rvm install ruby 2.3.0
, я получил следующую ошибку выходной нагрузки при работе ruby stack.rb
:
`/Users/myName/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- stacklike (LoadError)
from /Users/myName/.rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from stack.rb:2:in `<main>'`
Я изменил stack.rb линию 2 на: require_relative 'stacklike'
Edit 4:
я побежал rvm implode
затем brew install ruby
. Теперь я получаю ту же ошибку, но с другого пути /usr/local/Cellar/ruby/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb: 55: in require ': не может загружать такие file - stacklike (LoadError) из /usr/local/Cellar/ruby/2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb: 55: in require 'from stack.rb: 2 : в "
(теперь я пропускаю rvm
, но по крайней мере which -a ruby
usr/local/bin/ruby
выходов)
Edit 5 (FINAL EDIT): Я просто переустановил рубин, создал новый каталог & файлов, а теперь как-то работает. .. cheers & спасибо всем за вашу помощь!
являются 'stack.rb' и' stacklike.rb' в том же каталоге? –
@ sagarpandya82 да, оба файла находятся в одном каталоге – user1234
поэтому удалите 'ruby' и' gem' из/usr/bin –