我想知道,为什么这不起作用是由于错误
object ws1 {
class MyClass(a: Long)
val biList = List(BigInt(1), BigInt(2))
val mcList = biList map { new MyClass(_.longValue) } // error
//val mcList = biList map { x => new MyClass(x.longValue) } // ok
}
的
missing parameter type for expanded function ((x$1) => x$1.longValue)
或更准确地说
type mismatch: found ws1.MyClass, required scala.math.BigInt => ?
missing parameter type for expanded function ((x$1) => x$1.longValue)
答案 0 :(得分:5)
快速匿名函数的_
占位符语法实际上只适用于非常简单的情况。您的错误解释了这里发生了什么:
缺少扩展函数的参数类型((x $ 1)=> x $ 1.longValue)
所发生的事情就是这个
val mcList = biList map { new MyClass(_.longValue) }
扩展到此
val mcList = biList map { new MyClass(x => x.longValue) }
lambda是在你放置_
的地方创建的,而不是你想要的整个花括号封闭部分。如果你想让它按照你期望的方式工作,你只需要添加3个额外的字符(和一些可选的空格):
val mcList = biList map { x => new MyClass(x.longValue) }