2016-04-13 13 views
0
#stacklike.rb file 
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 file 
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/jchu773/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require': cannot load such file -- stacklike.rb (LoadError) 
    from /Users/jchu773/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require' 
    from stack.rb:1:in `<main>' 

こんにちは、私は現在、David Black's Well Grounded Rubyistを読んでおり、現在モジュールを学習しています。私は彼のエクササイズの例に従っていますが、#requireメソッドを使用するたびに、上記のエラーがポップアップして、誰でも知っていますか?モジュール内の#requireメソッド

+0

'require'を' require_relative'に変更すると動作しますか?もしそうなら、違いが何であるかを知りたければ、[このSO Q&A](http://stackoverflow.com/q/3672586/567863)は素晴らしいリソースです。 –

答えて

0

require_relativeは相対パスからファイルを必要と

は、ファイルが元の正確な(絶対)パス

を指定することができます必要があります必要があります。 私はapp.rbとmodule.rbを1つのディレクトリに持っています(c:/ users/ruby​​/app/this_app /) require_relativeはapp.rbを実行したモジュールファイルを探します require_relative "module"は、 "module(.rb)"には、私が信じる完全なパスと拡張子の名前を指定する必要があるかもしれません。私は、拡張名にはよく分からないが、私はそれが

require "https://stackoverflow.com/users/ruby/app/this_app/module(.rb)"

0

requireは、絶対パスを必要とする完全な絶対パスを必要とする100%確信しているが、あなたはrequire "./stacklike"でカレントディレクトリから必要な使用することができます。 require_relativeは、現在のディレクトリを基準にしたパスを使用します。したがって、require_relative "stacklike"も機能します。

一般的に言えば、ソースファイルは、Rubyのロードパスにディレクトリを追加してから、require "source_file"を実行してロードします。 Rubygemsはrequireを強化して、インストールされた宝石からファイルを読み込むことができます。

rubygems/core_ext/kernel_require.rb:54:in 'require': cannot load such file -- stacklike.rb (LoadError)

あなたが「stacklike」という名前の宝石をロードしようとしていると仮定しRubygemsの、から来ている:エラーメッセージが理由です。

関連する問題