0

我想知道有没有办法访问在 scala 中调用高阶方法的对象。例如说我有以下代码:

val list = List(1, 3, 4, -1, 2, 0)
val filtered = list filter(_ > 0)

在过滤器方法中说我想测试头部值我将如何实现它?就像是:

val filter = list filter(_ > 0 + head)
4

2 回答 2

8

您访问它的方式与访问时相同filter

val filter = list filter(_ > 0 + list.head)

我应该提一下,因为List它是不可变的,所以你可以安全地做到这一点。

如果您在列表上链接多个操作,那么最简单的解决方案是创建一个中间val

val first10 = x.getList() take 10
val filter = first10 filter(_ > 0 + first10.head)

尽管我喜欢将操作链接在一起,但无论如何这通常更具可读性。

于 2013-10-03T13:26:21.957 回答
0

您始终可以将 getList 的结果传递给函数,例如:

scala> def getList: List[Int] = (0 to 10).toList
getList: List[Int]

scala> getList match { case (xs: List[Int]) =>
     |   xs.filter(_ > xs.head + 5)
     | }
res1: List[Int] = List(6, 7, 8, 9, 10)

或者比以下更有趣的东西x > 5

scala> def getList: List[Int] = (10 to 1 by -1).toList
getList: List[Int]

scala> getList
res6: List[Int] = List(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)

scala> getList match { case (xs: List[Int]) =>
     |   xs.filter{ x => xs.head % x == 0 }
     | }
res7: List[Int] = List(10, 5, 2, 1)

注意:这适用于xs.head,因为它应该是一个非常便宜的操作,但是如果您计划进一步查看列表,例如 xs(5) 或其他东西,您将多次遍历列表。

于 2013-10-03T14:27:04.977 回答