Шеста задача

  1. Има ли проблем, ако използваме define_method?
    Във връзка със следния цитат от guide-а Как да (не) си изпращаме задачите: Ако дефинирате метод с define_method, може да подминете ограничението за брой методи в клас. (...) Не пасем трева. Ако сте направили така, резултата ще варира от това да ви вземем няколко точки за стил, до това въобще да не ви дадем точки на задачата.

  2. rate = ExchangeRate.new
    rate.set :USD, :BGN, '1.6'.to_d
    rate.get(:USD, :EUR) # => nil
    rate.get(:USD, :BGN) # => BigDecimal.new('1.6')
    rate.get(:USD, :BGN) # => BigDecimal.new('.625')
    

    Последният ред не е ли rate.get(:BGN, :USD) # => BigDecimal.new('.625') ?

    describe '#convert' do
      it 'converts from A to B using an existing rate A -> B' do
        rate.set :EUR, :BGN, '1.95583'.to_d
        rate.convert(:EUR, :BGN, 100.to_d).should eq '195.583'.to_d.to_d
      end
    end
    

    Защо на 3ти ред има 2 пъти to_d?

    Лоша практика ли е да се дефинира клас за изключение в друг клас?

  3. @Николай, ако смяташ, че ще стане много по-добре с него. Ако не го правиш, за да заобиколиш ограничението. Аз не съм го ползвал и не виждам къде има остра нужда от define_method, но ти може да имаш по-добра идея.

    @Нели, за първите две неща си права, грешки са. За третото - не, не е лоша практика.

  4. Класът ExchangeRate само между две валути ли може да поддържа курса или между повече? Защото се казва rate, в единствено число, но пък пише, че set метода може да се извиква многократно?

  5. Обменният курс между две еднакви валути е винаги единица (очевидно) и това не трявба да може да се променя.

    А какво е поведението, ако се опита да се смени - хвърля се изключение или друго? Освен това ако се подадат две еднакви валути и обменият курс е единица - това ок ли е или пак се смята за грешка?

  6. Money.new('3.4'.to_d, :BGN) == Money.new('3.4'.to_d, :USD)
    

    При мен не се хвърля изключение. Стойността на == е false. Имплементирал съм <=>, както трябва. Ако е >= се хвърля изключение. Някой да има същия проблем?

    П.С. Сега видях в нета, че Comparable#==, хваща всички изключения, които се случват в <=>.

  7. @Елена: Наистина, една от реализациите изисква поне 13 метода. (Аз имах същия проблем с максималния брой методи в клас, затова ми се наложи да помисля за нещо друго.) Разгледай написаното в същата тази тема, може да ти дойдат идеи.

Трябва да сте влезли в системата, за да може да отговаряте на теми.