使用foldRight定义如下的concat函数可以正确连接列表
def concat[T](xs: List[T], ys: List[T]): List[T] = (xs foldRight(ys))(_ :: _)
Run Code Online (Sandbox Code Playgroud)
但是使用foldLeft这样做
def concat1[T](xs: List[T], ys: List[T]): List[T] = (xs foldLeft(ys))(_ :: _)
Run Code Online (Sandbox Code Playgroud)
导致编译错误value :: is not a member of type parameter T,需要帮助理解这种差异.
编辑:
以防万一有人可能正在寻找折叠的详细解释 http://lampwww.epfl.ch/teaching/programmation_avancee/documents/programmation_avancee_5_en-2x2.pdf
sen*_*nia 12
参数顺序foldLeft与中的不同foldRight.
xs.foldRight(ys){(element, aggregator) => element :: aggregator}
xs.foldLeft(ys){(aggregator, element) => element :: aggregator}
Run Code Online (Sandbox Code Playgroud)
使用占位符语法foldLeft- (_ :: _)- 您正在尝试执行以下操作:aggregator :: element.这意味着 element.::(aggregator)并且没有::方法element(类型element是T).
| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |