1. ホーム
  2. ruby

[解決済み] string literal in condition "とはどういう意味ですか?

2022-02-12 04:05:37

質問

プログラムを実行しようとすると、「"string literal in condition (on line 10)"」というエラーが表示されるのですが。何が間違っているのでしょうか?

puts "Welcome to the best calculator there is. Would you like to (a) calculate the area of a geometric shape or (b) calculate the equation of a parabola? Please enter an 'a' or a 'b' to get started."
response = gets.chomp

if response == "a" or "A"

       puts "ok."

elsif response == "b" or "B"

       puts "awesome."

else

       puts "I'm sorry. I did not get that. Please try again."

end

解決方法は?

の両側で、完全な条件を指定する必要があります。 or .

if response == "a" or response == "A"

の両側は or Ruby では、左側にあるものを基準にして右側にあるものを推測することはありません。 右辺が素の文字列である場合 "A" 以外のものは false または nil は "true" と見なされるので、式全体は常に "true" として評価されます。しかし、Rubyはこの式が文字列であり、実際にはブール値ではないこと、あなたが意図したとおりに指定されていない可能性があることに気付き、質問にあるような警告を発します。

また case を使うと、ひとつの値に対して複数のテストを行うのが簡単になります。 when の場合、それらは事実上 or を一緒に編集しています。

case response
  when "a","A"
    puts "ok"
  when "b","B"
    puts "awesome."
  else
    puts "I'm sorry. I did not get that.  Please try again."
end

アルファベットの大文字と小文字を無視するという特殊な状況に対しては、テストの前に大文字と小文字のどちらかに変換すればいいということもできます。

case response.upcase 
  when "A"
    puts "ok"
  when "B"
    puts "awesome."
  else
    puts "I'm sorry, I did not get that.  Please try again."
 end