2009-09-18 18 views
12

में फ़ंक्शन को कैसे व्यवस्थित करें मैं लूप के लिए पहले पैरामीटर निश्चित के साथ List.foreach में 2 पैरामीटर फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं।स्कैला

private def mathFunc1(a: Double, b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(mathFunc1(2.1)) 
} 

यह काम करता है: वास्तव में मैं (List.foldLeft करते हैं)

यह काम नहीं करता एक पैरामीटर जो एक पैरामीटर के एक समारोह रिटर्न के एक समारोह में दो पैरामीटर के एक समारोह करी हैं:

private def mathFunc2(a: Double)(b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(mathFunc2(2.1)) 
} 

लेकिन मैं mathFunc1 के हस्ताक्षर को बदलने के लिए नहीं करना चाहते हैं, तो मैं कुछ ऐसा करना चाहते हैं:

private def mathFunc1(a: Double, b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(CONVERT_TWO_PARAMS_TO_ONE_ONE(mathFunc1)(2.1)) 
} 

उत्तर

18
private def mathFunc1(a: Double, b: Double) = 
    println(a + b) 


def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(mathFunc1(2.1, _)) 
} 

अंडरलाइन, स्कैला वाइल्डकार्ड!

एक छोटी सी जिज्ञासा के रूप में, यह भी काम करेगा:

def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(Function.curried(mathFunc1 _)(2.1)) 
} 

या भी: eval में डबल:

val curriedMathFunc1 = Function.curried(mathFunc1 _) 
def eval(v: Double) = { 
    List(1.0, 2.0, 3.0).foreach(curriedMathFunc1(2.1)) 
} 
+0

मुझे माफ करना, बस जिज्ञासा से, क्या पैरामीटर वी के प्रयोजन है? हर बार परिणाम 3.1, 4.1, 5.1 – jimakos17

+0

@ jimakos17 इसका उपयोग नहीं किया जाता है। इस सवाल पर यह वैसे ही था, इसलिए मैंने इसे इस तरह रखा। –