Fixed wrong overloading.

`float op rational` should return `float`, since float is an inexact
value.
parent 237a57bb
...@@ -106,18 +106,26 @@ def Rational(numerator = 0, denominator = 1) ...@@ -106,18 +106,26 @@ def Rational(numerator = 0, denominator = 1)
Rational.new(numerator, denominator) Rational.new(numerator, denominator)
end end
[Fixnum, Float].each do |cls| [:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
[:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op| Fixnum.instance_exec do
cls.instance_exec do original_operator_name = "__original_operator_#{op}_rational"
original_operator_name = "__original_operator_#{op}_rational" alias_method original_operator_name, op
alias_method original_operator_name, op define_method op do |rhs|
define_method op do |rhs| if rhs.is_a? Rational
if rhs.is_a? Rational Rational(self).__send__(op, rhs)
Rational(self).__send__(op, rhs) else
else __send__(original_operator_name, rhs)
__send__(original_operator_name, rhs)
end
end end
end end
end end
Float.instance_exec do
original_operator_name = "__original_operator_#{op}_rational"
alias_method original_operator_name, op
define_method op do |rhs|
if rhs.is_a? Rational
rhs = rhs.to_f
end
__send__(original_operator_name, rhs)
end
end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment