2013-06-16 4 views
3

보석의 코드 rom을 읽었습니다. 특히 잘 알려진 루비 개발자가 저술 한 서브 모듈 rom-relation을 읽었습니다. rom-relation/lib/rom-relation.rb, 우리는 읽을 수`Float :: INFINITY` 대신`1.0/0`이 사용되는 이유는 무엇입니까?

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

하지만 난 Float::INFINITY의 사용을 보지 않았다. IRB에서

, 나는 시도 :

> 1.0/0 == Float::INFINITY 
=> true 
  • Float::INFINITY를 사용할 수 있습니까?
  • Infinity은 상수 인 대문자로 시작하지만, 왜 안 되니? INFINITY? (어떤 규칙을 사용합니까?)
+0

는'INFINITY'는 대문자로 시작합니다. – sawa

+0

내가 모국어가 영어가 아니므로 모든 영어를 습득하지 못한다면 용서를받을 수 있습니까? – Hettomei

+2

왜 그렇게 많은 투표 수가 있습니까? 그것은 합리적인 질문입니다. – Stefan

답변

2

아마도 코드는 Float::INFINITY 전에 도입 되었습니까? Ruby 1.9.2에서 소개 된 것처럼 보입니다 : 1.9.1 docs, 1.9.2 docs. 웹을 둘러 보는 빠른 트롤은 2010 년 8 월에 Ruby가 도입되었다는 것을 보여줍니다. 사용자가보고있는 특정 파일이 매우 새 것이지만 코드가 어딘가에서 복사 된 것으로 의심됩니다.

(나는 명명에 대해 언급 할 수 없다. 상황을 보면, 이미 혼합물이있다.)

+1

git으로 코드 부분이 인 것을 볼 수 있습니다. 저자 : Piotr Solnica <[email protected]> 날짜 : Tue Jun 4 19:34:46 2013 +0200 이전에 썼다는 것을 믿을 수 없습니다. 2010 년 8 월. – Hettomei

+0

@Hettomei : 대답에서 말했듯이, 나는 그것이 어딘가에서 복사 된 것 같습니다. 그 라인이 2010 년 8 월 이전에 처음으로 작성되었다고 믿을 수없는 이유는 무엇입니까? 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