然后在List scala中
有没有人有一个如何使用和使用列表的例子?我注意到,然后为List定义了但是文档没有一个示例来说明如何使用它.
我的理解是f和然后g意味着执行函数f然后执行函数g.函数g的输入是函数f的输出.它是否正确? 问题1 – 我编写了以下代码,但我不明白为什么我应该使用和然后因为我可以用map实现相同的结果. scala> val l = List(1,2,3,4,5) l: List[Int] = List(1,5) //simple function that increments value of element of list scala> def f(l:List[Int]):List[Int] = {l.map(x=>x-1)} f: (l: List[Int])List[Int] //function which decrements value of elements of list scala> def g(l:List[Int]):List[Int] = {l.map(x=>x+1)} g: (l: List[Int])List[Int] scala> val p = f _ andThen g _ p: List[Int] => List[Int] = <function1> //printing original list scala> l res75: List[Int] = List(1,5) //p works as expected. scala> p(l) res74: List[Int] = List(1,5) //but I can achieve the same with two maps. What is the point of andThen? scala> l.map(x=>x+1).map(x=>x-1) res76: List[Int] = List(1,5) 有人可以分享一些实际的例子,其中andThen比filter,map等方法更有用.上面我可以看到的一个用途是,然后我可以创建一个新函数p,它是其他函数的组合.但是这种用法带来了andThen的有用性,而不是List和andThen 解决方法
然后从PartialFunction继承了List的继承树中的一些父类.当您通过索引访问其元素时,可以使用List作为PartialFunction.也就是说,您可以将List视为从索引(从零开始)到在列表本身中占据该索引的元素的函数.
如果我们有一个清单: val list = List(1,4) 我们可以像函数一样调用list(因为它是一个): scala> list(0) res5: Int = 1 然后我们允许我们用另一个组成一个PartialFunction.例如,也许我想创建一个List,我可以通过索引访问其元素,然后将元素乘以2. val list2 = list.andThen(_ * 2) scala> list2(0) res7: Int = 2 scala> list2(1) res8: Int = 4 这与在列表上使用map基本相同,除了计算是懒惰的.当然,你可以用一个视图完成同样的事情,但是可能有一些通用的情况,你想要将List视为PartialFunction,而不是(我想不出任何偏离我的头脑) . 在您的代码中,您实际上并没有在List本身上使用andThen.相反,你正在将它用于你传递给地图的函数等.在f和g上映射一次两次并且在f和g之间映射一次之间的结果没有区别.然而,当多次映射变得昂贵时,优选使用该组合物.在列表的情况下,当列表很大时,遍历多次可能在计算上有点昂贵. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |