是否可以直接在采用第二个参数列表(带有隐式参数)的方法的结果上调用应用函数?即使在逻辑位置有括号,我也会收到相同的编译时类型错误,这表明它没有按预期解析它。
val x = Map(1 -> 2, 2->4, 3-> 6) //1
val y = x.map(_.swap) //2
y(4) //3
x.map(_.swap)(4) //4
((x.map(_.swap))(4) //5
第 4 行不解析是有意义的,因为 (4) 很容易看起来像是 map()的第二个参数列表,但第 5 行,.map 表达式周围有一组 (),但它仍然将 (4) 关联到 .map 而不是 .map() 的结果。
有没有办法在一个表达式中执行第 2 行和第 3 行?
编辑:我知道.apply(),这是编译器将插入的内容。有没有办法在不手动脱糖的情况下做到这一点?
是的,有几种可能的解决方案。 所有工作要么满足隐式参数列表,要么给编译器一个提示,即表达式已经结束,()
read apply,实际上是应用方法,没有第二个参数列表。
1. 呼叫.apply()
scala> Map(1 -> 2, 2 -> 4, 3 -> 6).map(_.swap).apply(4)
res7: Int = 2
2. 直接提供隐式
另一种选择是直接提供隐式
突破示例
import scala.collection.breakOut
scala> List(1).map(_ + 1)(breakOut)(0)
res38: Int = 2
我认为一般的问题是:您必须填充以提供隐式内容以使CanBuildFrom
正常工作,或者明确声明您要调用 apply 而不是填充第二个参数列表。
您可以在 http://docs.scala-lang.org/tutorials/FAQ/breakout 中找到更多信息。反对这个名字,secCanBuildFrom 作品。