2

我忘了把 end 这个词放在 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': 
  1. 这个错误是什么意思?

当我对 saved_restaurants 方法使用正确的语法时,我没有收到任何错误。

4

2 回答 2

3

您的文件由中定义restaurant.rb的方法调用读取。在其方法定义中,它具有以下部分:requireguide.rbkernel_require.rb

def require path

  ...

rescue LoadError => load_error

  ...

  raise load_error
end

当您在读取的文件中出现语法错误时,将LoadError引发require.

于 2013-05-18T12:54:37.787 回答
1

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

require restaurant

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

require path

这里的路径是 restaurant.rb 并且这个函数失败是因为 require 函数因为语法错误而无法加载 rb 文件。

请记住,您正在查看调用堆栈,因此不应显示缺少 end 的函数,因为未调用该函数,而仅加载了 ruby​​ 文件。

于 2013-05-18T12:39:11.900 回答