【问题标题】:syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError) Address_book语法错误,意外的输入结束,期待关键字结束(SyntaxError)地址簿
【发布时间】:2016-05-14 16:13:56
【问题描述】:

当我尝试在命令行上运行我的 ruby​​ address_book 进行测试时,我收到了这个错误,我不知道代码有什么问题。

错误

address_bloc.rb:1:in require_relative': >/Users/paul/address_bloc/controllers/menu_controller.rb:125: syntax error, >unexpected end-of-input, expecting keyword_end (SyntaxError) from address_bloc.rb:1:in'

-address_bloc.rb

require_relative 'controllers/menu_controller'


 menu = MenuController.new

 system "clear"
 puts "Welcome to AddressBloc!"
 menu.main_menu

-controllers/menu_controller.rb

require_relative "../models/address_book"

class MenuController

  attr_accessor :address_book

  def initialize
    @address_book = AddressBook.new
  end

  def main_menu
    puts "Main Menu - #{@address_book.entries.count} entries"
    puts "1 - View all entries"
    puts "2 - Create an entry"
    puts "3 - Search for an entry"
    puts "4 - Import entries from a CSV"
    puts "5 - Exit"
    print "Enter your selection: "

    selection = gets.to_i
    case selection
    when 1
      system "clear"
      view_all_entries
      main_menu
    when 2
      system "clear"
      create_entry
      main_menu
    when 3
      system "clear"
      search_entries
      main_menu
    when 4
      system "clear"
      read_csv
      main_menu
    when 5
      puts "Good-bye!"
      exit(0)
    else
      system "clear"
      puts "Sorry, that is not a valid input"
      main_menu
    end
  end

  def view_all_entries
     @address_book.entries.each do |entry|
       system "clear"
       puts entry.to_s

     entry_submenu(entry)
  end
     system "clear"
     puts "End of entries"
   end

   def create_entry

     system "clear"
     puts "New AddressBloc Entry"
     print "Name: "
     name = gets.chomp
     print "Phone number: "
     phone = gets.chomp
     print "Email: "
     email = gets.chomp

     @address_book.add_entry(name, phone, email)

     system "clear"
     puts "New entry created"
   end

   def search_entries
   end

   def read_csv
   end

   def entry_submenu(entry)
     puts "n - next entry"
     puts "d - delete_entry"
     puts "e - edit this entry"
     puts "m - return to main menu"

     selection = gets.chomp

     case selection
     when "n"
     when "d"
     when "e"
     when "m"
       system "clear"
       main_menu
     else
       system "clear"
       puts "#{selcetion} is not a valid input"
       entry_submenu(entry)
     end
  end
end

谢谢

【问题讨论】:

  • 通常这意味着缺少end,但对于未格式化的代码很难说(``` 在这里不起作用)
  • 你真的需要重新格式化你的问题的所有降价。
  • 如何在这里格式化我的代码?
  • 欢迎来到 Stack Overflow。请花时间格式化您的问题以提高可读性。您要求我们帮助您,但您没有花时间轻松帮助您。您可以通过阅读stackoverflow.com/help/formattingstackoverflow.com/editing-help 了解有关格式化markdown 的更多信息,点击编辑框中的? 即可。
  • 你有什么问题?

标签: ruby-on-rails ruby


【解决方案1】:

你的最终end 正在关闭def entry_submenu(entry) 现在你需要一个最终的end 来关闭class MenuController

像这样:

require_relative "../models/address_book"

class MenuController
  attr_accessor :address_book

  def initialize
    @address_book = AddressBook.new
  end

  def main_menu
    puts "Main Menu - #{@address_book.entries.count} entries"
    puts "1 - View all entries"
    puts "2 - Create an entry"
    puts "3 - Search for an entry"
    puts "4 - Import entries from a CSV"
    puts "5 - View Entry Number n"
    puts "6 - Exit"
    print "Enter your selection: "

    selection = gets.to_i

    case selection
    when 1
      system "clear"
      view_all_entries
      main_menu
    when 2
      system "clear"
      create_entry
      main_menu
    when 3
      system "clear"
      search_entries
      main_menu
    when 4
      system "clear"
      read_csv
      main_menu
    when 5
      system "clear"
      display_entry_by_n
      main_menu
    when 6
      puts "Good-bye!"
      exit(0)
    else
      system "clear"
      puts "Sorry, that is not a valid input"
      main_menu
    end
  end


  def view_all_entries
    @address_book.entries.each do |entry|
      system "clear"
      puts entry.to_s

      entry_submenu(entry)
    end
    system "clear"
    puts "End of entries"
  end

  def create_entry

    system "clear"
    puts "New AddressBloc Entry"

    print "Name: "
    name = gets.chomp
    print "Phone number: "
    phone = gets.chomp
    print "Email: "
    email = gets.chomp

    @address_book.add_entry(name, phone, email)

    system "clear"
    puts "New entry created"
  end

  def display_entry_by_n
    system "clear"
    puts "Enter the entry number"
    print "Number:"
    selection = get.chomp.to_i
    if selection < @address_book.entries.size
      puts @address_book.entries[selection]
      puts "Press enter to return to main menu"
      gets.chomp
      system "clear"
    else
      puts "#{selection} is not a valid input"
      display_entry_by_n
    end
  end

  def search_entries
  end

  def read_csv
  end

  def entry_submenu(entry)
    puts "n - next entry"
    puts "d - delete_entry"
    puts "e - edit this entry"
    puts "m - return to main menu"

    selection = gets.chomp

    case selection
    when "n"
    when "d"
    when "e"
    when "m"
      system "clear"
      main_menu
    else
      system "clear"
      puts "#{selcetion} is not a valid input"
      entry_submenu(entry)
    end
  end
end

【讨论】:

  • 我添加了'end',结果发现更多错误。 /Users/xxxx/address_bloc/controllers/menu_controller.rb:1:in require_relative': /Users/paul/address_bloc/models/address_book.rb:39: syntax error, unexpected keyword_end, expecting end-of-input (SyntaxError) from /Users/paul/address_bloc/controllers/menu_controller.rb:1:in ' from address_bloc.rb:1:in require_relative' from address_bloc.rb:1:in
    '
  • 所以现在您在address_bloc/models/address_book.rb 中缺少一个结束end。这就是格式如此重要的原因。如果您因为缩进很差而无法阅读代码,那么这些问题就很难诊断。阅读您的错误,它们会为您提供诊断问题所需的一切。
猜你喜欢
  • 2013-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多