Иван обнови решението на 11.10.2015 13:38 (преди около 9 години)
+def convert_to_bgn(amount, currency)
+ if currency.equal? :usd
+ (amount * 1.7408).round(2)
+ elsif currency.equal? :eur
+ (amount * 1.9557).round(2)
+ elsif currency.equal? :gbp
+ (amount * 2.6415).round(2)
+ else
+ amount.round(2)
+ end
+end
+
+
+def compare_prices(price_one, currency_one, price_two, currency_two)
+ price_one_bgn = convert_to_bgn(price_one, currency_one)
+ price_two_bgn = convert_to_bgn(price_two, currency_two)
+
+ if price_one_bgn > price_two_bgn
+ 1
+ elsif price_one_bgn < price_two_bgn
+ -1
+ else
+ 0
+ end
+end
Като гледам би трябвало да работи, но нека оправим няколко неща:
- Това, което правиш с
equal?
, не е добре.equal?
сравнява дали два обекта са еднакви и това, че символите са интернирани в Ruby и кодът ти работи е само случайност. Използвай нормално сравнение==
.
foo = 'baz'
bar = 'baz'
foo.object_id # => 70282459129120
bar.object_id # => 70282459099480
foo.equal?(bar) # => false
foo = :baz
bar = :baz
foo.object_id # => 1087708
bar.object_id # => 1087708
foo.equal?(bar) # => true
- В
convert_to_bgn
всичко се повтаря, ако изкараш обменния курс в променлива, ще можеш да напишеш израза на един ред. - След като го направиш погледни за Hash-ове в Ruby и помисли дали няма начин да махнеш и if-а
- В
compare_prices
си си написал<=>
, та.. погледни за този метод в Ruby