हास्केल में यह शानदार जेनेरिक ट्रैवर्सल सामान है जो आपको संग्रह में प्रत्येक नोड पर map
जैसे कुछ कॉल करने देता है, या तो नीचे-ऊपर या ऊपर-नीचे। इसे everywhere
कहा जाता है और आप everywhere f tree
और f
जैसे कुछ ऐसा करेंगे जो आपके पेड़ में प्रत्येक नोड पर कॉल किया जाएगा।स्केल में समकक्ष आपके बॉयलरप्लेट को स्क्रैप करें?
Traversable
के लिए कुछ स्काला में बराबर लेखन आसान है, लेकिन हास्केल के भी tuples पर काम करता है और मामले वर्ग या, के बराबर अधिक सामान्य रूप से, क्या स्काला कॉल Product
रों।
आप productIterator
विधि का उपयोग कर एक Product
में तत्वों के ऊपर पार कर सकते हैं, लेकिन वहाँ एक बार आप निर्माता (वास्तव में, मुझे लगता है 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: _*)
}
क्या मैं इतना है कि यह काम करने का कुछ मौका है साथ [?]
जगह ले सकता है?
धन्यवाद!
में हर जगह के उपयोग का एक उदाहरण है जो मैं खोज रहा था। धन्यवाद! – TOB
क्या यह एक मनमाना केस क्लास ले सकता है और इसके पैरामीटर के फ़ंक्शन के आधार पर एक नया उदाहरण लौटा सकता है, और उत्पाद के सभी उदाहरणों के साथ काम करता है, या यह सिर्फ टुपल्स तक ही सीमित है? –
@ लुइगीप्लिंग: यह मामला कक्षाओं के साथ भी काम करता है, कम से कम आकारहीन 2.0 के बाद, मैक्रोज़ के लिए धन्यवाद। एक अच्छा उदाहरण है [यहां] (https://github.com/milessabin/shapeless/blob/e3399e35a7bb17b286141f53827619a3dc98efe8/examples/src/main/scala/shapeless/examples/sybclass.scala#L65)। – Blaisorblade