0

我想知道,为什么由于错误而这不起作用

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)
4

1 回答 1

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) }
于 2013-09-17T04:11:04.530 回答