作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 scala 2.7.6 中编译这段代码:
def flatten1(l: List[Any]): List[Any] = l.flatten
我得到错误:
no implicit argument matching parameter type (Any) = > Iterable[Any] was found
为什么?
最佳答案
如果您希望能够将 List(1, 2, List(3,4), 5)
“扁平化”为 List(1, 2, 3, 4, 5)
,那么你需要这样的东西:
implicit def any2iterable[A](a: A) : Iterable[A] = Some(a)
连同:
val list: List[Iterable[Int]] = List(1, 2, List(3,4), 5) // providing type of list
// causes implicit
// conversion to be invoked
println(list.flatten( itr => itr )) // List(1, 2, 3, 4, 5)
编辑:以下是我的原始答案,直到 OP 在对 Mitch 的答案的评论中澄清了他的问题
当您扁平化
List[Int]
时,您期望发生什么?您是否希望函数对 List
中的 Int
求和?如果是这样,您应该查看 2.8.x 中的新聚合函数:
val list = List(1, 2, 3)
println( list.sum ) //6
关于scala: list.flatten: 没有找到匹配参数类型 (Any) => Iterable[Any] 的隐式参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598699/
我是一名优秀的程序员,十分优秀!