2013-06-16 3 views
3

Я прочитал код жемчужины rom, особенно его подмодуль rom-relation, написанный известными хорошими разработчиками рубинов. В rom-relation/lib/rom-relation.rb, мы можем прочитать:Почему используется `1.0/0` вместо` Float :: INFINITY`?

#Represent a positive, infinitely large Float number 
Infinity = 1.0/0 

, но я не видел использование Float::INFINITY.

В IRB, я попробовал:

> 1.0/0 == Float::INFINITY 
=> true 
  • Почему бы не использовать Float::INFINITY?
  • Infinity начинается с прописного, который является постоянным, но почему бы не INFINITY? (I.e., какое соглашение используется здесь?)
+0

'INFINITY' начинается с заглавной буквы. – sawa

+0

Если я говорю, что мой родной язык не английский, и поэтому я не владею всем английским языком, я прощен? – Hettomei

+2

Почему так много нисходящих и закрытых голосов? Это разумный вопрос. – Stefan

ответ

2

Возможно, код был написан до Float::INFINITY? Мне кажется, что он был введен в Ruby 1.9.2: 1.9.1 docs, 1.9.2 docs. Быстрый трал в Интернете предполагает, что Ruby был представлен в августе 2010 года. Несмотря на то, что конкретный файл, который вы просматриваете, очень новый, я подозреваю, что код был скопирован откуда-то старым.

(я не могу комментировать наименование. Глядя на контексте, есть смесь уже там.)

+1

С git я вижу, что часть кода Автор: Piotr Solnica <[email protected]> Дата: Вт 4 июн 19:34:46 2013 +0200 Я не могу поверить, что это было написано ранее Август 2010 года. – Hettomei

+0

@Hettomei: Как я уже сказал в ответ, я подозреваю, что он * скопировал * откуда-то давным-давно. Почему вы не можете поверить, что эта строка была написана до августа 2010 года? Ruby был вокруг долгое время, и люди часто копируют бит кода из одного места в другое. –

+0

Может быть, код пытается оставаться обратно совместимым или что автор не знал *, что 'Float :: INFINITY' был добавлен и придерживался трюка, который он знал. –

8

Джон уже сказал, что Float::INFINITY был введен в Руби 1.9.2. Поэтому, если ROM использовал эту константу, для нее потребуется Ruby 1.9.2.

1.0/0 с другой стороны работает для каждой версии Ruby.

Однако, вы можете, конечно, использовать Float::INFINITY в коде:

ROM::Infinity == Float::INFINITY 
#=> true 
Смежные вопросы