为什么kernel_required.rb在我的堆栈跟踪中?

我忘了在if语句的末尾添加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': **/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 `' 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 `' 

我的代码没有错误:

 def self.saved_restaurants # read the restaurant file restaurants = [] if file_usable? file = File.new(@@filepath, 'r') file.each_line do |line| restaurants < 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 < 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方法的正确语法时,我没有收到任何错误。

您的文件restaurant.rbguide.rb的方法调用require guide.rb ,该函数在kernel_require.rb定义。 在其方法定义中,它具有以下部分:

 def require path ... rescue LoadError => load_error ... raise load_error end 

当您在读取的文件中出现语法错误时,将引发一个被抢救的LoadError ,并将其引发为require的错误。

如果我理解正确,有一个名为guide.rb的文件:

 require restaurant 

基本上,require是在kernel_require.rb中实现的函数,其原型如下:

 require path 

这里的路径是restaurant.rb,这个函数失败了,因为由于语法错误,require函数无法加载rb文件。

请记住,您正在查看调用堆栈,因此不会显示缺少结尾的函数,因为该函数未被调用,但只加载了ruby文件。