我想知道有没有办法访问在 scala 中调用高阶方法的对象。例如说我有以下代码:
val list = List(1, 3, 4, -1, 2, 0)
val filtered = list filter(_ > 0)
在过滤器方法中说我想测试头部值我将如何实现它?就像是:
val filter = list filter(_ > 0 + head)
我想知道有没有办法访问在 scala 中调用高阶方法的对象。例如说我有以下代码:
val list = List(1, 3, 4, -1, 2, 0)
val filtered = list filter(_ > 0)
在过滤器方法中说我想测试头部值我将如何实现它?就像是:
val filter = list filter(_ > 0 + head)
您访问它的方式与访问时相同filter
:
val filter = list filter(_ > 0 + list.head)
我应该提一下,因为List
它是不可变的,所以你可以安全地做到这一点。
如果您在列表上链接多个操作,那么最简单的解决方案是创建一个中间val
:
val first10 = x.getList() take 10
val filter = first10 filter(_ > 0 + first10.head)
尽管我喜欢将操作链接在一起,但无论如何这通常更具可读性。
您始终可以将 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) 或其他东西,您将多次遍历列表。