繁体   English   中英

Scala:为什么foldLeft不能用于两个列表的连接?

[英]Scala: Why foldLeft can't work for an concat of two list?

使用foldRight定义如下的concat函数可以正确连接列表

def concat[T](xs: List[T], ys: List[T]): List[T] = (xs foldRight(ys))(_ :: _)

但是使用foldLeft这样做

def concat1[T](xs: List[T], ys: List[T]): List[T] = (xs foldLeft(ys))(_ :: _)

导致编译错误value :: is not a member of type parameter T ,需要帮助理解这种差异。

编辑:

以防万一有人可能正在寻找折叠的详细解释http://lampwww.epfl.ch/teaching/programmation_avancee/documents/programmation_avancee_5_en-2x2.pdf

foldLeft参数顺序与foldLeft参数顺序foldRight

xs.foldRight(ys){(element, aggregator) => element :: aggregator}

xs.foldLeft(ys){(aggregator, element) => element :: aggregator}

使用foldLeft - (_ :: _)占位符语法 - 您正在尝试执行以下操作: aggregator :: element 意味着 element.::(aggregator)并且没有::在方法element (的类型elementT )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM