map
Haskell には、ボトムアップまたはトップダウンのいずれかで、コレクション内のすべてのノードでのようなものを呼び出すことができる、このクールで一般的なトラバーサル機能があります。それが呼び出され、次のeverywhere
ようなことを行いeverywhere f tree
、f
ツリー内のすべてのノードで呼び出されます。
Scala で for と同等のものを書くのTraversable
は簡単ですが、Haskell のものはタプルや case クラスと同等のもの、またはより一般的には Scala が s と呼ぶものでも機能します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: _*)
}
これが機能する可能性があるように、何に置き換えることができ[?]
ますか?
ありがとう!