昨日に引き続きIntegerに関して。 個人的に、Integerブームが起こってます。
Integerに関しては、http://www
今日は最大公約数と最小公倍数を同時に返してくれるInteger#gcdlcmについてです。
このInteger#gcdlcmの実装が気に入らない!!
どこが気に入らないのかという本題に入る前に、Integer#lcmについての実装を見てみよう!
1 # File lib/rational.rb, line 457 2 def lcm(other) 3 if self.zero? or other.zero? 4 0 5 else 6 (self.div(self.gcd(other)) * other).abs 7 end 8 end
オーソドックスなの最小公倍数の求め方。 ここではあまり問題にしない。
このコードをよーく覚えておいてください。
ここからが本題です。
Integer#gcdlcmの実装を見て見る。
1 # File lib/rational.rb, line 473 2 def gcdlcm(other) 3 gcd = self.gcd(other) 4 if self.zero? or other.zero? 5 [gcd, 0] 6 else 7 [gcd, (self.div(gcd) * other).abs] 8 end 9 end
Integer#lcmにそっくり!
・・・って、Integer#lcmのコードにInteger#gcdいれただけじゃないですか・・・。
せっかくこのコードの直前で、Integer#lcmを定義してるのに、何で使わないんやろうか・・・。
1 def gcdlcm(other) 2 return [self.gcd(other), self.lcm(other)] 3 end
という風に書いても不都合はなさそうやけど・・?
むしろ、こういう風に書いてくれたほうが、気持ちいいんやけども。
ん~、Integerには謎がいっぱいや。
posted by
y_tsuda
on Fri 15 Aug 2008
at 04:06