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