> Complex(1,2).numerator がエラーになります。rational を読んでいるとエラー > になりません。 今ごろ気がついたのですが、Integer#{numerator,denominator} だけじゃないですね。 Float#{numerator,denominator} も必要です。 $ ruby19 -r rational -r complex -e 'Complex(1.0,2.0).numerator' /usr/local/ruby19/lib/ruby/1.9.0/complex.rb:354:in `denominator': undefined method `denominator' for 1.0:Float (NoMethodError) from /usr/local/ruby19/lib/ruby/1.9.0/complex.rb:361:in `numerator' from -e:1:in `<main>' しかも、Float#{numerator,denominator} なんて何処にも定義されてないので、 rational を読んでも関係ありません。 素直に直そうとすると、結局 Float#to_r を定義することになるんじゃないか と思います。しかし、複素数の numerator、denominator を取るというのがよ くわからなくて、Common Lisp を始め、普通は複素数に対しては機能しないで すし、石塚さんに、意図を聞いたほうがいいですね。