我不确定为什么这不起作用:
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]))
Run Code Online (Sandbox Code Playgroud)
但这样呢?
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>))
Run Code Online (Sandbox Code Playgroud)
另一个_
Scala 超载的受害者.考虑一下:
f(_, 5) + 1 // Partial function application
f(_ + 1, 5) // Closure
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,_
正在替换整个参数.在这种情况下,它代表部分应用f
.在实践中,它等同于x => f(x, 5) + 1
,因为包含 的整个表达式f
变成了一个闭包.
在第二种情况下,_
是表达式的一部分.在这种情况下,整个表达式变成一个闭包,直到任何表达式分隔符 - 我的意思是,如果表达式嵌套在另一个表达式中,则只有内部表达式变为闭包.在实践中,它相当于f(x => x + 1, 5)
.