What does "string literal in condition" mean?

conditional-statements, literals, ruby, string

Solution

You have to specify the full condition on both sides of the `or`.

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

The two sides of the `or` are not connected; Ruby makes no assumptions about what's on the right based on what's on the left. If the right side is the bare string `"A"`, well, anything other than `false` or `nil` is considered "true", so the whole expression evaluates as "true" all the time. But Ruby notices that it's a string and not actually a boolean value, suspects you might not have specified what you meant to, and so issues the warning in the question.

You can also use a `case` expression to make it simpler to do multiple tests against a single value; if you supply a list of multiple possibilities in a single `when`, they are effectively `or`ed together:

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

For the specific situation of ignoring alphabetic case, you could also just convert to either upper or lower before testing:

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

Problem

Whenever I try to run the program, an error pops up saying "string literal in condition (on line 10)". What am I doing wrong? ``` 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 ```

Original source