2016-06-29 3 views
0

В настоящее время я читаю о модулях в книге «Хорошо заземленный рубист» Дэвида Блэка. Как я следовать к упражнению, я натыкаюсь на ошибку при попытке выполнить следующий код: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 rubyusr/local/bin/ruby выходов)

Edit 5 (FINAL EDIT): Я просто переустановил рубин, создал новый каталог & файлов, а теперь как-то работает. .. cheers & спасибо всем за вашу помощь!

+0

являются 'stack.rb' и' stacklike.rb' в том же каталоге? –

+0

@ sagarpandya82 да, оба файла находятся в одном каталоге – user1234

+0

поэтому удалите 'ruby' и' gem' из/usr/bin –

ответ

0

Возникла проблема: вы используете require вместо require_relative, чтобы понять разницу см. this.Самый простой способ запомнить это, как меня научили require для драгоценных камней и библиотек, require_relative для файлов.

У меня также есть некоторые критики вашей работы, если вы не возражаете:

require_relative "stacklike" 

class Stack 
    include Stacklike #<= Initiate the module 
end 

STACK_INFO = Stack.new #<= Turn the non-descriptive 's' into a more descriptive constant STACK_INFO 

def add_info #<= Create a method to add more information to the stack 
    STACK_INFO.add_to_stack("item one") 
    STACK_INFO.add_to_stack("item two") 
    STACK_INFO.add_to_stack("item three") 
end 

def objects_in_stack? #<= Create a method for the information that's inside of the stack 
    puts "Objects currently on the stack: " 
    puts STACK_INFO.stack 
end 

def taken? #<= Create a method for what's taken from the stack 
    taken = STACK_INFO.take_from_stack 
    puts "Removed this object: \e[31m#{taken}\e[0m" #<= Makes colored console output 
end 

add_info 
puts objects_in_stack? 
puts taken? 
puts objects_in_stack? 

module Stacklike 
    #<= Spaces are important in Ruby, mostly because it makes Ruby readable. 
    def stack 
    @stack ||= [] 
    end 

    def add_to_stack(obj) 
    stack.push(obj) 
    end 

    def take_from_stack 
    stack.pop 
    end 

end 

Это очень простой, и вы могли бы пойти так далеко, имея информацию из стека будет дано в качестве переменной аргумента, вы также можете запросить у пользователя информацию и т. д. Концепция Ruby - ООП, концепция ООП создает систему, в которой все успешно работает. Это мое понимание этого в любом случае. Надеюсь, это ответит на ваш вопрос, а затем на некоторые.


EDIT

Также можно попробовать установить последнюю версию рубина, если у вас установлен РВМ сделать rvm install ruby 2.3.0. Это установит последнюю версию и позволит запустить Ruby.

+1

попробует это, очевидно, используя rvm 1.26.10 – user1234

+0

Итак, после 'rvm install ruby ​​2.3.0', я получил новый loaderror, выглядит как он изменился с строки 54 на строку 55. Появится новая ошибка в редакции 3 из OP. – user1234

+0

@ user1234 Ну, хорошая новость: мы становимся дальше по линиям. Lol – 13aal

 Смежные вопросы

  • Нет связанных вопросов^_^