Я следую этому примеру из "Sinatra: Up and Running", и получаю следующее сообщение об ошибке:
game.rb: 8: список нечетных чисел для Hash@defeat = {камень:: ножницы, бумага:: камень, ножницы:: бумага}^game.rb: 8: синтаксическая ошибка, неожиданное ':', ожидание '}'@defeat = {камень:: ножницы, бумага:: камень, ножницы:: бумага}^
после запуска:
$ ruby -rubygems game.rb
Однако я понятия не имею, почему возникает проблема с этим утверждением.Я скопировал код прямо из книги.Я перепробовал много вариантов, и ничего не работает.Предполагается, что этот код выведет: «О, скала бьет ножницами. Удачи в следующий раз!»если я перейду к localhost: 4567 / throw / scissors и компьютер выберет рок.
game.rb ниже
require 'sinatra'
# before we process a route, we'll set the response as
# plain text and set up an array of viable moves that
# a player (and the computer) can perform
before do
content_type :txt
@defeat = {rock: :scissors, paper: :rock, scissors: :paper}
@throws = @defeat.keys
end
get '/throw/:type' do
# the params[] hash stores querystring and form data.
player_throw = params[:type].to_sym
# in the case of a player providing a throw that is not valid,
# we halt with a status code of 403 (Forbidden) and let them
# know they need to make a valid throw to play.
if !@throws.include?(player_throw)
halt 403, "You must throw one of the following: #{@throws}"
end
# now we can select a random throw for the computer
computer_throw = @throws.sample
# compare the player and computer throws to determine a winner
if player_throw == computer_throw
"You tied with the computer. Try again!"
elsif computer_throw == @defeat[player_throw]
"Nicely done; #{player_throw} beats #{computer_throw}!"
else
"Ouch; #{computer_throw} beats #{player_throw}. Better luck next time!"
end
end
Кстати, код, который я использовал для исходного вопроса, на самом деле был одиниз "исправлений" я попробовал не фактический код книги.Видимо, в коде книги было то же самое, что предложил скзиццо.Тем не менее, я все еще получаю сообщение об ошибке (см. Выше).В любом случае, если я попробую альтернативу sczizzo:
{: камень =>: ножницы,: бумага =>: камень,: ножницы =>: бумага}
, затем game.rb компилируется, но я получаюошибка выполнения:
#
если я зайду http://localhost:4567/throw/scissors
Решение: Instal Ruby 1.9! Спасибо всем