Haskell有这个很酷的通用遍历,可以让你map在集合中的每个节点上调用类似的东西,无论是自下而上还是自上而下.它被调用everywhere,你会做类似的事情,everywhere f tree并且f会在树中的每个节点上调用.
在Scala中编写等效的东西Traversable很简单,但Haskell也可以在元组和等效的case类上工作,或者更通用的是Scala调用Product的东西.
您可以遍历Product使用该productIterator方法的元素,但是一旦您知道构造函数的参数(实际上,我猜apply方法)应该是什么,有一些简单的方法将元组或案例类重新组合在一起吗?
def mapOnProduct[X](f: X -> X, prod: Product) {
val newArgs = prod.productIterator.map {
case x: X => f(x)
case id => id
}.toList
[?].apply(newArgs: _*)
}
Run Code Online (Sandbox Code Playgroud)
有什么可以替代[?],以便有机会工作?
谢谢!
| 归档时间: |
|
| 查看次数: |
922 次 |
| 最近记录: |