【发布时间】:2010-09-17 12:35:03
【问题描述】:
case class MyInt(val i : Int) {
private def factorial(a : Int) : Int = a match {
case 0 => 1
case n => (n) * factorial(n-1)
}
def ! = factorial(i)
override def toString = i.toString
}
object MyInt {
implicit def intToMyInt(x : Int) = MyInt(x)
implicit def myIntToInt(x : MyInt) = x.i
}
import MyInt._
object Factorial {
def main(args: Array[String]): Unit = {
val a = 5
val aFact = a!
println("factorial of " + a + " is " + aFact)
}
}
如果我没有在println 之前添加分号或空行,则编译失败:
递归值aFact需要类型
【问题讨论】:
-
@Missing Factor:我认为这不是同一个问题。这两个问题都是关于类型推断失败但这里我有一个一元运算符和隐式转换(我不明白你为什么删除类型推断标签)
-
@onof:编译器不知道它是一元运算符。对于编译器来说,这只是一个普通的方法。问题基本相同:“为什么分号推断在后缀表示法中调用此方法失败?”。
-
@onof:这两行的解析如下:
val aFact = a.!(println("factorial of " + a + " is " + aFact)) -
@onof:我不知道该怎么解释你。也许这两个代码 sn-ps 会有所帮助:ideone.com/wM13l, ideone.com/4PPx1.
标签: scala