Подтвердить что ты не робот

Зачем лечить 0 как истину в Ruby?

Я читаю отличный Ruby on Rails Tutorial и столкнулся с следующим кодом.

if 0
  true
else
  false
end

Приведенное выше возвращает true и показывает, как в отличие от многих языков (C - очевидный пример), ruby ​​рассматривает 0 как true. Вместо того, чтобы игнорировать поведение как своеобразное, я полагаю, что есть веская причина этого значительного отклонения от конвенции. Например, Python рассматривает 0 как False, как и следовало ожидать.

Короче говоря, что является обоснованием при проектировании рубина для обработки 0 как true?

4b9b3361

Ответ 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) является ложным.