【发布时间】:2011-10-21 06:07:20
【问题描述】:
鉴于此代码:
class Rational(n: Int, d: Int) {
require(d != 0)
private val g = gcd(n.abs, d.abs)
val numerator = n / g
val denominator = d / g
def this(n: Int) = this(n, 1)
override def toString = numerator + "/" + denominator
def +(r: Rational) = new Rational(numerator * r.denominator + r.numerator * denominator, denominator * r.denominator)
def *(r: Rational) = new Rational(numerator * r.numerator, denominator * r.denominator)
def +(i: Int) = new Rational(i) + this
private def gcd(a: Int, b: Int) : Int = {
if (b == 0) a else gcd(b, a % b)
}
}
为什么 scala 不能推断 +(i: Int) 返回一个有理数? (fsc 给出overloaded method + needs result type 错误)
如果我将该方法更改为:
def +(i: Int): Rational = { new Rational(i) + this }
有效...
【问题讨论】:
标签: scala type-inference