下一个代码
def f(chars: List[Char]): List[List[Char]] = chars match {
case Nil => List(Nil)
case x :: xs => for {
v <- f(xs)
} yield List(x) :: v
}
Run Code Online (Sandbox Code Playgroud)
给出错误消息
- type mismatch; found : List[List[Any]] required: List[List[Char]]
Run Code Online (Sandbox Code Playgroud)
请帮助我理解为什么'for'选择最一般的Any而不是Char?我应该阅读语言规范中的哪个主题?谢谢.
使用scala 2.9.2此代码:
BigDecimal(1) + new java.math.BigDecimal("1")
new java.math.BigDecimal("1") + BigDecimal(1)
不编译,因为scala.math.BigDecimal $#javaBigDecimal2bigDecimal未应用于第二种情况
但是,如果我在它之前定义相同的隐式权限,代码将编译:
BigDecimal(1) + new java.math.BigDecimal("1")
implicit def javaBigDecimal2bigDecimal(x: java.math.BigDecimal): BigDecimal = BigDecimal(x)
new java.math.BigDecimal("1") + BigDecimal(1)
为什么这样?