0

这个问题不是关于方法链中表示法的推荐实践,而是关于理解这种特殊情况。

我现在正在学习 Scala 和 Play 大约 2 周。我在 2011 年的某个时候在 scala 有一个月的学习经验。

我无法理解为什么这条线不起作用

    List(1,2,3) map {x=>x*2}.filter((x:Int)=>x==2)

但这一个正在工作

    List(1,2,3).map{x=>x*2}.filter((x:Int)=>x==2)

我能想到的一个原因是过滤器是在函数值而不是结果集合上调用的。

为什么当空格和点符号混合使用时它仍然不起作用?如果我保留纯空格或点符号,那么它不会起作用。

如果我到处都看到纯符号,我就不会感到困惑。我看到了混合符号,尤其是在 Play 代码库中。我错过了什么?

4

1 回答 1

3

它按预期工作。

这一行:

List(1,2,3) map {x=>x*2}.filter((x:Int)=>x==2)

方法

List(1,2,3) map ( {x=>x*2}.filter((x:Int)=>x==2) )

这绝对是一个错误,但你可以像这样使用它:

val f1 = (x: Int) => x * 2
val f2 = (x: Int) => x + 2

List(1,2,3) map f1.andThen(f2) // List(1,2,3).map( f1.andThen(f2) )
//List[Int] = List(4, 6, 8)

此代码创建新函数作为 2 个函数的组合:{(x: Int)=>x*2}.andThen((x:Int)=> x + 2)然后对其应用map方法。

您可以混合使用空格或点符号,但您应该知道点的“优先级”更高。

于 2013-06-18T10:38:11.320 回答