summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-rational/mrblib/rational.rb
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-05-17 16:18:46 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-05-17 16:18:46 +0900
commit912d23634d60def0c6a370b059f69999fe363c9b (patch)
tree1bedfd41ea5c10bdb7f1af2c4a8ff2ebb4c15cdb /mrbgems/mruby-rational/mrblib/rational.rb
parent237a57bbe831c57d3ebb0f9cc69768dbc8dda589 (diff)
downloadmruby-912d23634d60def0c6a370b059f69999fe363c9b.tar.gz
mruby-912d23634d60def0c6a370b059f69999fe363c9b.zip
Fixed wrong overloading.
`float op rational` should return `float`, since float is an inexact value.
Diffstat (limited to 'mrbgems/mruby-rational/mrblib/rational.rb')
-rw-r--r--mrbgems/mruby-rational/mrblib/rational.rb30
1 files changed, 19 insertions, 11 deletions
diff --git a/mrbgems/mruby-rational/mrblib/rational.rb b/mrbgems/mruby-rational/mrblib/rational.rb
index 30aaef915..82ae98425 100644
--- a/mrbgems/mruby-rational/mrblib/rational.rb
+++ b/mrbgems/mruby-rational/mrblib/rational.rb
@@ -106,18 +106,26 @@ def Rational(numerator = 0, denominator = 1)
Rational.new(numerator, denominator)
end
-[Fixnum, Float].each do |cls|
- [:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
- cls.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
- Rational(self).__send__(op, rhs)
- else
- __send__(original_operator_name, rhs)
- end
+[:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
+ Fixnum.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
+ Rational(self).__send__(op, rhs)
+ else
+ __send__(original_operator_name, rhs)
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