वास्तविक उत्तर देने से पहले कुछ बातों का उल्लेख यहां करें:
- आपके प्रश्न का कोई लेना-देना नहीं है
left
, यह कम करने और तह करने के बीच के अंतर के बारे में है
- अंतर बिल्कुल कार्यान्वयन नहीं है, बस हस्ताक्षर देखें।
- यह सवाल विशेष रूप से स्काला के साथ कुछ भी नहीं करता है, यह कार्यात्मक प्रोग्रामिंग की दो अवधारणाओं के बारे में है।
अपने प्रश्न पर वापस जाएं:
यहाँ पर foldLeft
( foldRight
जिस बिंदु को मैं करने जा रहा हूँ , उस पर हस्ताक्षर भी हो सकते हैं):
def foldLeft [B] (z: B)(f: (B, A) => B): B
और यहाँ पर हस्ताक्षर है reduceLeft
(फिर से दिशा यहाँ कोई फर्क नहीं पड़ता)
def reduceLeft [B >: A] (f: (B, A) => B): B
ये दोनों बहुत समान दिखते हैं और इस तरह भ्रम पैदा करते हैं। reduceLeft
का एक विशेष मामला है foldLeft
(जिस तरह से इसका मतलब है कि आप कभी-कभी दोनों में से किसी एक का उपयोग करके एक ही बात व्यक्त कर सकते हैं)।
जब आप कहते reduceLeft
हैं एक परList[Int]
इसे यह पूर्णांकों की पूर्ण सूची को सचमुच एक ही मूल्य में कम कर देगा, जो कि प्रकार का हो रहा है Int
(या इसका एक प्रकारांतर ) Int
, इसलिए [B >: A]
।
जब तुमने फोन किया foldLeft
कि List[Int]
यह पूरी सूची को मोड़ देगा (एक कागज के टुकड़े को रोल करने की कल्पना करें) एक ही मूल्य में, लेकिन यह मान भी इससे संबंधित नहीं है Int
(इसलिए [B]
)।
यहाँ एक उदाहरण है:
def listWithSum(numbers: List[Int]) = numbers.foldLeft((List.empty[Int], 0)) {
(resultingTuple, currentInteger) =>
(currentInteger :: resultingTuple._1, currentInteger + resultingTuple._2)
}
यह विधि एक लेता है List[Int]
और रिटर्न एक Tuple2[List[Int], Int]
या(List[Int], Int)
। यह राशि की गणना करता है और पूर्णांक की सूची के साथ एक टपल लौटाता है और यह राशि है। वैसे सूची को पीछे की ओर लौटाया जाता है, क्योंकि हम foldLeft
इसके बजाय इस्तेमाल करते हैं foldRight
।
गहराई से स्पष्टीकरण में अधिक के लिए उन सभी पर शासन करने के लिए एक गुना देखें ।