2012-02-20 8 views
10

क्या मैं सेटर्स में एकाधिक पैरामीटर का उपयोग कर सकता हूं?स्कैला सेटर्स - एकाधिक पैरामीटर

उदाहरण के लिए:

private var _a = 0 
def a = _a 
def a_= (b: Int, c: Int) = _a = b + c 

यदि हाँ, मैं कैसे सेटर विधि कॉल कर सकते हैं?

+0

tuples अच्छा कर रहे हैं:

मामले अपने आंतरिक संचालन में की तरह लग रहे हो सकता है। विधि 'अद्यतन() 'का उपयोग करने पर भी विचार करें, उदा। 'डीफ़ अपडेट (पी 1: टी 1, पी 2: टी 2, पी 3: टी 3, वी: वी) 'तो आप' ओबीजे (पी 1, पी 2, पी 3) = वी' – tuxSlayer

+0

लिख सकते हैं और हां, आप अभी भी इसे 'obj.a_' कह सकते हैं = (1, 2) 'लेकिन शायद यह 'सेटर' नहीं है;) – tuxSlayer

उत्तर

9

एक ट्यूपल के बारे में क्या?

class A { 
    private var _a = 0 
    def a = _a 
    def a_= (t: (Int, Int)) { 
    _a = t._1 + t._2 
    } 
} 

आप अजीब टपल पहुँच वाक्य रचना पसंद नहीं है:

class A { 
    private var _a = 0 
    def a = _a 
    def a_= (t: (Int, Int)) { 
    t match { 
     case(b, c) => _a = b + c 
    } 
    } 
} 

उपयोग:

val x = new A() 
x.a = (3, 7) 
x.a //10 
+0

इसका उदाहरण कैसे कहा जाता है? (मैं इसे अच्छी तरह से काम करने में सक्षम नहीं रहा हूं ... कम से कम [अब पुराना] 2.8।) –

+0

@pst: एक उदाहरण जोड़ा गया है, काम करता है (?) –

+0

प्रगति के लिए Hurray :) –

1

आप दो अन्य मूल्यों से एकल मान सेट करने के लिए की जरूरत है यह शायद नहीं एक है 'सेटर'। इस ऑपरेशन को एक सार्थक नाम देने या इसे इस वर्ग से बाहर ले जाने पर विचार करें।

private var _s: Whatever = // init 
def s_=(newValue: Whatever): Unit = _setter = newValue 
... 
implicit def t2whatever(t: (SomeTypeA, SomeTypeB)): Whatever = // some logic here 

अब हम अपने सेटर

obj.setter = sta -> stb 
// or 
obj.setter = (sta, stb) 

कौन सा लगभग बराबर ही है सादे tuples के साथ के रूप में हालांकि, सेटर अर्थ घायल नहीं है फोन Cal।

class Z { 
    private var _s = // init 

    def s = _s 
    def s_=(newValue: S) = _s = newValue 
} 

object Z { 
    def toS(a: S, b: S): S = ChineseZodiac.choose(0.14 * a, math.PI + b) 
} 

और फिर

obj.s = Z.toS(1, 2) 
+0

धन्यवाद। मैं समझता हूं कि सेटर अर्थात् बदला जा सकता है, लेकिन कभी-कभी मैं उस सेटटर को कोड के छोटे से उपयोग में उपयोग करता हूं, और यह आसान लगता है अगर मैं उस कोड को किसी अन्य ऑब्जेक्ट या क्लास में विभाजित नहीं करता ... –