2014-10-21 1 views
0

나는 이미 그 안에 들어 있지 않은 숫자 만 포함 할 수있는 여러 가지 종류의 컨테이너 인 NumberSet 클래스를 만들어야합니다.유추수를 누름

class NumberSet 
    include Enumerable 

    def initialize 
    @arr=[] 
    end 
    def each (&block) 
    @arr.each do |member| 
     block.call (member) 
    end 
    end 
    def << number 
    @arr<<number if @arr.include?(number) == false 
    end 
end 

이 코드는 합리적인 번호를 잘라냅니다. 예를 들어 (22/7)(3/1)과 같지 않아야합니다.

mine=NumberSet.new 
mine<<Rational(22/7) 
# => [(3/1)] 
mine<<3.0 
# => nil 

어떻게 해결할 수 있습니까?

+3

스타일링 포인트 : 대신 @arr'의 << 수있는 경우 @ arr.include (수) == FALSE ''할 @arr.include? (number)' – BroiSatse

+1

루비의'set' 라이브러리를 사용하지 않는 이유가 있습니까? –

답변

4

Rational의 사용법이 잘못되었습니다. 루비 최신으로

mine << Rational(22, 7) 
+0

네, 저의 실수를 발견했습니다. 어리석은 저요. 답변 감사합니다. – user103220

+0

"22/7".to_r은 다른 옵션입니다. – steenslag

1

을 할 경우, 당신이해야 :

mine << 22/7r 
+0

해야할까요? 큰 차이가 있습니다 :) –

+0

@SergioTulentsev Should. 그 이유는 덜 혼란스럽고 간결하기 때문입니다. – sawa

+2

이 새로운 구문이 마음에 들지 않지만 다행스럽게도 합법성을 다룰 필요가 없었습니다. 그래서 나는 상관하지 않는다. :) –