我不确定为什么这行不通:
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])))