O operador !
retorna um Bool
que resulta da negação da veracidade de um valor.
Quando utilizado em um if
em conjunto com uma variável, is_a?
, responds_to?
ou nil?
, o compilador restringirá os tipos de acordo:
a = alguma_condicao ? nil : 3
if !a
# aqui a é Nil porque a é falso nesse bloco
else
# aqui a é Int32, porque a é verdadeiro nesse bloco
end
b = alguma_condicao ? 1 : "x"
if !b.is_a?(Int32)
# aqui b é String porque ela não é um Int32
end