Есть ли в Ruby функция `bool`, такая как Python? - PullRequest
2 голосов
/ 22 мая 2019

В Python я могу определить логическое значение, которое вычисляет выражение, если я использую функцию bool.Например:

bool(1)
#=> True

Существует ли такая конструкция в Ruby?Я не могу найти доказательства того, что это так.В настоящее время мне приходится использовать тесты эквивалентности для определения логических значений, и мне было интересно, есть ли более удобный способ сделать это.

Ответы [ 3 ]

9 голосов
/ 22 мая 2019

Всегда есть классический

!!a

Это также работает в Javascript, C ++ и (с использованием not вместо !) Python.

Имейте в виду, что Ruby имеетдругие понятия правдивости, чем Python.В Python многие «пустые» объекты являются ложными, и их истинность может быть определена магическим методом.В Ruby только nil и false являются ложными, а все другие значения (включая числа, строки, списки и любой пользовательский класс) являются достоверными.

3 голосов
/ 22 мая 2019

Если вы знаете, какой тип вы будете использовать, вы можете попробовать имитировать логику Python в Ruby.

Пустой список, хеш или строка являются правдоподобными в Ruby, поэтому вам нужно проверить, не являются ли они пустыми:

![].empty?
# => false
![3].empty?
# => true
!"".empty?
# => false
!"foo".empty?
# => true

Аналогично, вы можете проверить, что целое число не равно нулю:

0 != 0
#=> false
1 != 0
#=> true
3.14 != 0
#=> true
3 голосов
/ 22 мая 2019

Если вы хотите 1 == true и 0 == false, вы должны явно сравнить значения, такие как:

if x == 1
  # do something
end

Это потому, что в Ruby только false и nilложныеОстальные оцениваются в true.

Другими словами:

def to_bool(x)
  !!x
end

to_bool(1)          #=> true
to_bool(0)          #=> true
to_bool("0")        #=> true
to_bool("1")        #=> true
to_bool(Object.new) #=> true

to_bool(nil)        #=> false
...