我忘了把结尾这个词放在if语句的末尾, 并得到以下错误:
/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':
当我使用saved_restaurants方法的正确语法时,我没有收到任何错误。
答案 0 :(得分:3)
您的文件restaurant.rb
由require
中的方法调用guide.rb
读取,该调用在kernel_require.rb
中定义。在其方法定义中,它具有以下部分:
def require path
...
rescue LoadError => load_error
...
raise load_error
end
当您在读取的文件中出现语法错误时,会引发LoadError
,这将被拯救,并将被引发为require
的错误。
答案 1 :(得分:1)
如果我理解正确,有一个名为guide.rb的文件:
require restaurant
基本上,require是在kernel_require.rb中实现的函数,其原型如下:
require path
这里的路径是restaurant.rb,这个函数失败了,因为语法错误导致require函数无法加载rb文件。
请记住,您正在查看调用堆栈,因此不应显示缺少结尾的函数,因为该函数未被调用,但只加载了ruby文件。