summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-rational/mrblib
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-05-17 16:37:34 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-05-17 16:37:34 +0900
commitb6e9fab64949b91f00d07c890935642f44147615 (patch)
tree13bfb6eb1889d82cdfb9d323b55293473cc9837c /mrbgems/mruby-rational/mrblib
parentcec92673ae9e24d73a6feb2d69602b5fa60dcddd (diff)
downloadmruby-b6e9fab64949b91f00d07c890935642f44147615.tar.gz
mruby-b6e9fab64949b91f00d07c890935642f44147615.zip
Implement part of `Rational` in C.
Diffstat (limited to 'mrbgems/mruby-rational/mrblib')
-rw-r--r--mrbgems/mruby-rational/mrblib/rational.rb43
1 files changed, 12 insertions, 31 deletions
diff --git a/mrbgems/mruby-rational/mrblib/rational.rb b/mrbgems/mruby-rational/mrblib/rational.rb
index a38f71407..54324b05f 100644
--- a/mrbgems/mruby-rational/mrblib/rational.rb
+++ b/mrbgems/mruby-rational/mrblib/rational.rb
@@ -2,29 +2,10 @@ class Rational < Numeric
# Override #<, #<=, #>, #>= in Numeric
prepend Comparable
- def initialize(numerator = 0, denominator = 1)
- @numerator = numerator
- @denominator = denominator
-
- _simplify
- end
-
def inspect
"(#{to_s})"
end
- def to_f
- @numerator.to_f / @denominator.to_f
- end
-
- def to_i
- to_f.to_i
- end
-
- def to_r
- self
- end
-
def to_s
"#{numerator}/#{denominator}"
end
@@ -86,24 +67,24 @@ class Rational < Numeric
nil
end
end
+end
- def negative?
- numerator.negative?
- end
-
- def _simplify
- a = numerator
- b = denominator
- a, b = b, a % b until b.zero?
- @numerator = @numerator.div(a)
- @denominator = @denominator.div(a)
+class << Numeric
+ def to_r
+ Rational(self, 1)
end
+end
- attr_reader :numerator, :denominator
+class << Rational
+ alias_method :_new, :new
+ undef_method :new
end
def Rational(numerator = 0, denominator = 1)
- Rational.new(numerator, denominator)
+ a = numerator
+ b = denominator
+ a, b = b, a % b until b.zero?
+ Rational._new(numerator.div(a), denominator.div(a))
end
[:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|