Как показывают многие другие примеры, на самом деле вам не нужен логический метод для логического выбора в ruby. Было бы плохой формой привести все к логическому значению, если вам не нужен логический тип.
Но если вам абсолютно необходим логический тип. Используйте! (bang bang) или "ложная ложь раскрывает правду".
› irb
>> a = nil
=> nil
>> defined?(a)
=> "local-variable"
>> defined?(b)
=> nil
>> !!defined?(a)
=> true
>> !!defined?(b)
=> false
Почему обычно не принуждают к принуждению:
>> (!!defined?(a) ? "var is defined".colorize(:green) : "var is not defined".colorize(:red)) == (defined?(a) ? "var is defined".colorize(:green) : "var is not defined".colorize(:red))
=> true
Вот пример, где это важно, потому что оно опирается на неявное приведение логического значения к его строковому представлению.
>> puts "var is defined? #{!!defined?(a)} vs #{defined?(a)}"
var is defined? true vs local-variable
=> nil