diff options
| author | Ukrainskiy Sergey <[email protected]> | 2018-08-09 17:09:02 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-05-15 16:57:21 +0900 |
| commit | 8808219e6d51673e6fa582819703e6e5912439b0 (patch) | |
| tree | 7ad830fc1ea3da35d81fe853cd44023790131895 /mrbgems/mruby-rational | |
| parent | 7f1f499b2277c4636824b7f3e9b301576aaddba5 (diff) | |
| download | mruby-8808219e6d51673e6fa582819703e6e5912439b0.tar.gz mruby-8808219e6d51673e6fa582819703e6e5912439b0.zip | |
Initial suffix support
Diffstat (limited to 'mrbgems/mruby-rational')
| -rw-r--r-- | mrbgems/mruby-rational/mrbgem.rake | 5 | ||||
| -rw-r--r-- | mrbgems/mruby-rational/mrblib/rational.rb | 46 | ||||
| -rw-r--r-- | mrbgems/mruby-rational/test/rational.rb | 3 |
3 files changed, 54 insertions, 0 deletions
diff --git a/mrbgems/mruby-rational/mrbgem.rake b/mrbgems/mruby-rational/mrbgem.rake new file mode 100644 index 000000000..4b540dec4 --- /dev/null +++ b/mrbgems/mruby-rational/mrbgem.rake @@ -0,0 +1,5 @@ +MRuby::Gem::Specification.new('mruby-rational') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'Rational class' +end diff --git a/mrbgems/mruby-rational/mrblib/rational.rb b/mrbgems/mruby-rational/mrblib/rational.rb new file mode 100644 index 000000000..457c0488a --- /dev/null +++ b/mrbgems/mruby-rational/mrblib/rational.rb @@ -0,0 +1,46 @@ +class Rational < Numeric + def initialize(numerator = 0, denominator = 1) + @numerator = numerator + @denominator = denominator + end + + attr_reader :numerator, :denominator +end + +def Rational(numerator = 0, denominator = 1) + Rational.new(numerator, denominator) +end + +module ForwardOperatorToRational + def __forward_operator_to_rational(op, &b) + original_operator_name = "__original_operator_#{op}_rational" + alias_method original_operator_name, op + define_method op do |rhs| + if rhs.is_a? Rational + Rational.new(self).send(op, rhs) + else + send(original_operator_name, rhs) + end + end + end + + def __forward_operators_to_rational + __forward_operator_to_rational :+ + __forward_operator_to_rational :- + __forward_operator_to_rational :* + __forward_operator_to_rational :/ + + singleton_class.undef_method :__forward_operator_to_rational + singleton_class.undef_method :__forward_operators_to_rational + end +end + +class Fixnum + extend ForwardOperatorToRational + __forward_operators_to_rational +end + +class Float + extend ForwardOperatorToRational + __forward_operators_to_rational +end
\ No newline at end of file diff --git a/mrbgems/mruby-rational/test/rational.rb b/mrbgems/mruby-rational/test/rational.rb new file mode 100644 index 000000000..6f20a6cd4 --- /dev/null +++ b/mrbgems/mruby-rational/test/rational.rb @@ -0,0 +1,3 @@ +assert 'Rational' do + assert_equal Rational, 0r.class +end
\ No newline at end of file |
