Зачем лечить 0 как истину в Ruby?
Я читаю отличный Ruby on Rails Tutorial и столкнулся с следующим кодом.
if 0
true
else
false
end
Приведенное выше возвращает true
и показывает, как в отличие от многих языков (C - очевидный пример), ruby рассматривает 0
как true
. Вместо того, чтобы игнорировать поведение как своеобразное, я полагаю, что есть веская причина этого значительного отклонения от конвенции. Например, Python рассматривает 0
как False
, как и следовало ожидать.
Короче говоря, что является обоснованием при проектировании рубина для обработки 0
как true
?
Ответы
Ответ 1
Я предполагаю, что Мац хотел концептуальную простоту "правдивости" как таковой - единственными "ложными" значениями являются false
и nil
. Период.
Использование только false
было бы самым чистым, но есть понятная необходимость включения nil
. Чтобы включить целочисленный нуль в качестве частного случая, можно было бы открыть интеллектуальные шлюзы для опроса правдоподобия других типов. Что относительно строк, ""
false? И массивы, []
false? И хеши, {}
false? Ad insanitum (см. JavaScript)...
Ответ 2
В рубине, если существует, это правда. Если нет, это неверно.
поэтому, с Ruby null (без адреса), а false - только false.
Все остальные являются истинными, потому что у него есть назначенный ему адрес.
Я думаю об этом; "Существует ли это?"
Ответ 3
В Common Lisp 0 также считается истинным. Например, следующий код возвращает true
.
(if 0 'true 'false)
Без сомнения, Ruby следует тому же дизайнерскому решению, принятому в Lisp. В Lispе только пустой список (представленный как nil
) является ложным.