summaryrefslogtreecommitdiff
path: root/lib/rational.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rational.rb')
-rw-r--r--lib/rational.rb28
1 files changed, 21 insertions, 7 deletions
diff --git a/lib/rational.rb b/lib/rational.rb
index 1e41b9a28a..e63e8c4814 100644
--- a/lib/rational.rb
+++ b/lib/rational.rb
@@ -92,7 +92,7 @@ class Rational < Numeric
elsif a.kind_of?(Float)
Float(self) + a
else
- x , y = a.coerce(self)
+ x, y = a.coerce(self)
x + y
end
end
@@ -107,7 +107,7 @@ class Rational < Numeric
elsif a.kind_of?(Float)
Float(self) - a
else
- x , y = a.coerce(self)
+ x, y = a.coerce(self)
x - y
end
end
@@ -122,7 +122,7 @@ class Rational < Numeric
elsif a.kind_of?(Float)
Float(self) * a
else
- x , y = a.coerce(self)
+ x, y = a.coerce(self)
x * y
end
end
@@ -138,7 +138,7 @@ class Rational < Numeric
elsif a.kind_of?(Float)
Float(self) / a
else
- x , y = a.coerce(self)
+ x, y = a.coerce(self)
x / y
end
end
@@ -161,7 +161,7 @@ class Rational < Numeric
elsif other.kind_of?(Float)
Float(self) ** other
else
- x , y = other.coerce(self)
+ x, y = other.coerce(self)
x ** y
end
end
@@ -184,6 +184,18 @@ class Rational < Numeric
end
end
+ def == (other)
+ if other.kind_of?(Rational)
+ @numerator == other.numerator and @denominator == other.denominator
+ elsif other.kind_of?(Integer)
+ self == Rational.new!(other, 1)
+ elsif other.kind_of?(Float)
+ Float(self) == other
+ else
+ other == self
+ end
+ end
+
def <=> (other)
if other.kind_of?(Rational)
num = @numerator * other.denominator
@@ -200,9 +212,11 @@ class Rational < Numeric
return self <=> Rational.new!(other, 1)
elsif other.kind_of?(Float)
return Float(self) <=> other
- else
- x , y = other.coerce(self)
+ elsif defined? other.coerce
+ x, y = other.coerce(self)
return x <=> y
+ else
+ return nil
end
end