+ 3
What's wrong with this code?
# Ruby a = gets puts !(a) Suppose that a == false. The code outputs false! Who can explain how to make the NOT operator work?
2 Respostas
+ 5
when using gets a is a string input. Even if it is an empty string when checking it by itself as a comparison it will return true as a boolean because it exists. If a was equal to nil or false it would return false. Then you are using the not operator (!) to flip the result.
a = false
puts !(a) // outputs true
a = nil
puts !(a) // outputs true
Even if you typed in nil or false as the input, a is still actually a string "nil" or "false" not the ruby keyword value of nil or false. When an object in ruby is set (even empty) and checked like (a) you're actually checking if that object exists not the value of the object. If it exists then true is returned, if the object is not set (nil) then false is returned.
The not operator (!) just inverts, or flips, the true to false, or the false to true
What you most likely want to do is compare a against some other string value.
a = gets.chomp // chomp is needing to get rid of the '\n' character at the end of the input
puts (a == "b") // this compares the value of a to the string "b"
Here if b is input at the prompt it will return true.
+ 13
a = gets
=> a is a string.
In Ruby, any string is truthy.
So, !(a) will always be false.