1

私は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 はスペースに敏感であると教えてくれました。空白を削除したところ、うまくいきました。ブール値の後に問題が発生し、それも修正しました。現在、意図したとおりに機能しています。

4

1 に答える 1