私はRubyが初めてです。私の過去は Java にあります。どうやらRubyのケース式として知られているスイッチケースを使用しようとしています。ユーザー入力を受け入れ、その入力に特定の文字が含まれているかどうかを確認し、それらの文字を他の文字に置き換えたいと考えています。この単純なプログラムを実行しようとすると、多くの構文エラーが発生しますが、その理由はわかりません。このステートメントを間違って使用している場合、およびこの状況でケース式を使用できるかどうかを誰かに説明してもらえますか? ありがとうございました。
empty_string = true
while empty_string do
print "Pleathe enter a thtring: "
user_input = gets.chomp
user_input.downcase!
case
when user_input.include? ("s")
user_input.gsub!(/s/, "th")
when user_input.include? ("ch")
user_input.gsub!(/ch/, "th")
when user_input == ""
puts "You typed noting! You get nothing sir!"
when user_input != ""
empty_string = false
else
puts "There are no 's's in your string."
end
end
puts "Zai jian, #{user_input}"
以下は、行と構文エラーによって相関するエラーです
rb.rb:9 : 構文エラー、予期しない ( arg、user_input.include の場合、keyword_then または ',' または ';' または '\n' を期待していますか? ("s")
rb.rb:11 : 構文エラー、予期しない keyword_when、user_input.include のときに keyword_end が必要ですか? ("ch") ^
rb.rb:13 : 構文エラー、予期しない keyword_when、user_input == "" の場合は keyword_end が必要です ^
rb.rb:15 : 構文エラー、予期しない keyword_when、user_input != "" の場合は keyword_end が必要です ^ rb.rb:17 : 構文エラー、予期しない keyword_else、keyword_end が必要です
rb.rb:21 : 構文エラー、予期しない keyword_end、入力の終わりが必要です
以下は@Phlipのおかげで修正されたコードです
empty_string = true
while empty_string do
print "Pleathe enter a thtring: "
user_input = gets.chomp
user_input.downcase!
case
when user_input.include?("s")
user_input.gsub!(/s/, "th")
empty_string = false
when user_input.include?("ch")
user_input.gsub!(/ch/, "th")
empty_string = false
when user_input == ""
puts "You typed noting! You get nothing sir!"
empty_string = true
else
puts "There are no 's's in your string."
end
end
puts "Zai jian, #{user_input}"
問題は、.include? の後にスペースがあったことでした。@Phlip は、Ruby はスペースに敏感であると教えてくれました。空白を削除したところ、うまくいきました。ブール値の後に問題が発生し、それも修正しました。現在、意図したとおりに機能しています。