Haskell有这个很酷的通用遍历,可以让你在集合中的每个节点上调用map
之类的东西,无论是自下而上还是自上而下。它被称为everywhere
,您可以执行everywhere f tree
之类的操作,并在树中的每个节点上调用f
。
在Scala中为Traversable
编写等效的东西很容易,但Haskell也适用于元组和等价的案例类,或者更一般地说,是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: _*)
}
我可以用[?]
代替什么,以便有机会工作?
谢谢!