无法在地图中使用通配符

时间:2013-09-17 03:34:23

标签: scala

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

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)

1 个答案:

答案 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) }