2009-11-02 10 views
9

मैं स्काला में मामला कक्षाओं के लिए चर निर्माता तर्क के साथ प्रयोग कर रहा था, लेकिन उन्हें एक मामले वर्गों 'माता-पिता के निर्माता को पारित करने में असमर्थ हूँ:पास चर संख्या (2.8) माता-पिता निर्माता के मामले वर्ग

abstract case class Node(val blocks: (Node => Option[Node])*) 
case class Root(val elementBlocks: (Node => Option[Node])*) extends Node(elementBlocks) 

उपर्युक्त संकलन नहीं करता है ... क्या यह वास्तव में ऐसा करना संभव है?

+0

निश्चित रूप से, पहले के उत्तरों को देखने के लिए समय नहीं था। – p3t0r

+0

[स्केल में इंट * विधि को कैसे पास करें] के संभावित डुप्लिकेट?] (Http://stackoverflow.com/questions/12436392/how-to-pass-list-to-int-method-in-scala) –

+0

I मैंने एक नया प्रश्न * मूल प्रश्न * के रूप में चिह्नित किया है क्योंकि यह सामान्य मामले के लिए पूछता है, न केवल कक्षा –

उत्तर

7

यह 2.7 के साथ काम करता है:

abstract case class A(val a: String*) 
case class B(val b: String*) extends A(b:_*) 

2,8 के साथ काम करना चाहिए।

+0

मामले के लिए, केस क्लास विरासत को अस्वीकार करने के लिए बाध्य किया जाता है। –

19

आप :_* वाक्य रचना जो का मतलब उपयोग करने की आवश्यकता "एक दृश्य के रूप में इस क्रम का इलाज!" अन्यथा, एन वस्तुओं के आपके अनुक्रम को 1 आइटम के अनुक्रम के रूप में माना जाएगा (जो आपके आइटमों का अनुक्रम होगा)।

def funcWhichTakesSeq(seq: Any*) = println(seq.length + ": " + seq) 

val seq = List(1, 2, 3) 
funcWhichTakesSeq(seq)  //1: Array(List(1, 2, 3)) -i.e. a Seq with one entry 
funcWhichTakesSeq(seq: _*) //3: List(1, 2, 3) 
संबंधित मुद्दे