Non-nil values are considered true:
["0", [], {}, "", 0, true, false, nil].each { |x|
bool = (x) ? true : false
puts "#{x.inspect}: #{bool}"
}
"0": true
[]: true
{}: true
"": true
0: true
true: true
false: false
nil: false
I mostly expected every one of the outputs here except for the literal 0 value
being true. Noted for future reference.
Additionally confusing, is that Integer() will barf on most non-number inputs, but for some reason "nil" means 0.
irb(main):002:0> Integer(nil) => 0Unexpected.