diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-05-17 16:18:46 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-05-17 16:18:46 +0900 |
| commit | 912d23634d60def0c6a370b059f69999fe363c9b (patch) | |
| tree | 1bedfd41ea5c10bdb7f1af2c4a8ff2ebb4c15cdb /mrbgems/mruby-rational/mrblib/rational.rb | |
| parent | 237a57bbe831c57d3ebb0f9cc69768dbc8dda589 (diff) | |
| download | mruby-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.rb | 30 |
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 |
