2013-05-18 51 views
2

我忘了把這個詞結束,在結束if語句, 並得到了以下錯誤:爲什麼kernel_required.rb在我的堆棧跟蹤中?

/home/***/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': **/home/****/Desktop/ruby/food_finder/lib/restaurant.rb:84: syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError)** 
    from /home/****/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
    from /home/****/Desktop/ruby/food_finder/lib/guide.rb:1:in `<top (required)>' 
    from /home/****/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
    from /home/****/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require' 
    from init.rb:14:in `<main>' 

我的代碼沒有錯誤:

def self.saved_restaurants 
     # read the restaurant file 
     restaurants = [] 
     if file_usable? 
      file = File.new(@@filepath, 'r') 

      file.each_line do |line| 
       restaurants << Restaurant.new.import_line(line.chomp) 
      end 

      file.close 
     **end** -- > forgotten end 
     # return instances of restaurant 
     return restaurants 
    end 

我的代碼有錯誤:

def self.saved_restaurants 
     # read the restaurant file 
     restaurants = [] 
     if file_usable? 
      file = File.new(@@filepath, 'r') 

      file.each_line do |line| 
       restaurants << Restaurant.new.import_line(line.chomp) 
      end 

      file.close 
     -- > forgotten end 
     # return instances of restaurant 
     return restaurants 
    end 

我的問題是: 爲什麼我得到的錯誤與我的代碼有關? 像下面這樣:

/home/***/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': 
  1. 這個錯誤是什麼意思?

當我使用saved_restaurants方法的正確語法時,我不會收到任何錯誤。

回答

1

如果我理解正確的話有一個名爲guide.rb文件,它的作用:

require restaurant 

基本上,需要在kernel_require.rb,其原型是像實現的功能:

require path 

這裏path是restaurant.rb,並且此函數失敗,因爲require函數由於語法錯誤而無法加載rb文件。

請記住,您正在查看調用堆棧,因此缺少結束的函數不應顯示,因爲該函數未被調用,但僅加載了ruby文件。

3

您的文件restaurant.rb通過調用require中的方法guide.rb讀取,該文件在kernel_require.rb中定義。在它的方法定義,它有這個部分:

def require path 

    ... 

rescue LoadError => load_error 

    ... 

    raise load_error 
end 

如果您有讀取文件中的語法錯誤,這將提高一個LoadError,其救出,將可能存在的require錯誤。

+0

謝謝..我現在明白了。 – liron

+0

現在,真正的問題是:爲什麼它是這樣設計的?我沒有答案。 – sawa

+0

它爲什麼要這樣做?任何人? – liron

相關問題