我不确定为什么这行不通:

scala> case class Loader(n: String, x: String, l: List[String])
scala> val m: Map[String, (List[String])=>Loader] =
     | Map("x" -> Loader("x", "x1", _:List[String]))

<console>:8: error: type mismatch;
 found   : (List[String]) => (java.lang.String, Loader)
 required: (String, (List[String]) => Loader)
       Map("x" -> Loader("x", "x1", _:List[String]))


但是呢?

scala> Loader("t", "x", _:List[String])
res7: (List[String]) => Loader = function1>

scala> val m = Map("x" -> res7)
m: scala.collection.immutable.Map[java.lang.String,(List[String]) => Loader] =
  Map((String,function1>))

最佳答案

解析器不确定将匿名函数的开头放在何处。有时您可以通过添加另一对括号来解决此问题(尽管并非总是如此):

val m: Map[String, (List[String])=>Loader] =
Map("x" -> (Loader("x", "x1", _:List[String])))


我在这里看不到任何歧义,因此可能只是不够聪明而无法解决。我认为,解析器忽略了->后面具有匿名函数的可能性(这也是一个库构造,并使用隐式魔术和所有小门的东西,这使小解析器产生了思维循环)。

当您将其写为显式元组时,它将可以正常工作。

val m: Map[String, (List[String])=>Loader] =
Map(("x", Loader("x", "x1", _:List[String])))

10-04 17:32