2011-09-08 10 views
6

एक अनुवर्ती के रूप में लागू होते हैं: scala loan pattern, optional function paramकैसे ओवरलोड स्केला कार्य करने के लिए पर तरीकों

क्या उचित सिंटैक्स को अतिभारित लागू तरीकों withLoaner परम स्थानांतरित करने के लिए हो सकता है? मैंने निम्नलिखित असफलताओं के कई संस्करणों का प्रयास किया है। इसके अलावा, मेरी त्रुटि में कोई अंतर्दृष्टि अवधारणात्मक रूप से बहुत सराहना की।

def withLoaner = new { 
    def apply(n:Int, op: Int => String):String = (1 to n).map(op).mkString("\n") 
    def apply(n:Int, op:() => String):String = apply{n, i:Int => op()} // no compile 
    def apply(op:() => String):String = apply{1, i:Int => op()} // no compile 
} 
+0

Goind एक कदम आगे, तो आप बस तीन withLoaner तरीकों हो सकता है: def withLoaner (एन, जे, ऑप्ट: इंट => स्ट्रिंग): स्ट्रिंग = ... और अन्य दो। –

उत्तर

11

जब एक से अधिक पैरामीटर प्रदान करने के लिए, आप कोष्ठक उनके आसपास का उपयोग करना चाहिए। {} का उपयोग केवल एकल पैरामीटर के लिए काम करता है।

साथ ही, फ़ंक्शन अक्षर का उपयोग करते समय, यदि आप प्रकार निर्दिष्ट करते हैं, तो आपको सभी फ़ंक्शंस पैरामीटर को ब्रांड्स के अंदर रखना होगा।

तो,

def withLoaner = new { 
    def apply(n:Int, op: Int => String):String = (1 to n).map(op).mkString("\n") 
    def apply(n:Int, op:() => String):String = apply(n, i => op()) // no type on i 
    def apply(op:() => String):String = apply(1, (i: Int) => op()) // parenthesis around parameters 
} 
3

2 थोड़ा परिवर्तन:

  • उपयोग ( बजाय { जब apply बुला:

    लागू (.......) ( आसपास

  • उपयोग एक निहित कार्य के लिए तर्क:

    लागू (1 (i: इंट) => सेशन())

+3

यहां कुछ भी अंतर्निहित नहीं है। –

संबंधित मुद्दे