加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:41:27 所属栏目:安全 来源:网络整理
导读:使用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))(_ :: _) 导致编译错误
使用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))(_ :: _)

导致编译错误值::不是类型参数T的成员,需要帮助理解这种差异.

编辑:

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

解决方法

foldLeft中的参数顺序与foldRight中的参数顺序不同.

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

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

使用foldLeft – (_ :: _)的占位符语法 – 您正在尝试执行以下操作:aggregator :: element.这个means元素.:( aggregator)并且元素中没有::方法(元素的类型是T).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读