2009-11-02 33 views
9

tôi đã thử nghiệm với lập luận constructor biến cho các lớp trường hợp tại Scala, nhưng tôi không thể vượt qua chúng để các nhà xây dựng của công ty mẹ là một trường hợp lớp:vượt qua số biến của tham số trong scala (2.8) trường hợp lớp để constructor mẹ

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

ở trên không biên dịch ... thực sự có thể thực hiện việc này không?

+0

chắc chắn, không có thời gian để xem câu trả lời trước đó. – p3t0r

+0

có thể trùng lặp của [Làm thế nào để vượt qua Danh sách để Int * phương pháp trong scala?] (Http://stackoverflow.com/questions/12436392/how-to-pass-list-to-int-method-in-scala) –

+0

tôi đã đánh dấu một câu hỏi mới là * câu hỏi cha mẹ * vì nó yêu cầu cho trường hợp chung, không chỉ cho các trường hợp lớp học –

Trả lời

7

này hoạt động với 2,7:

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

nên làm việc với 2,8.

+0

Trên thực tế, trường hợp thừa kế trường hợp bị ràng buộc vì không được phép. –

19

Bạn cần sử dụng cú pháp :_* có nghĩa là "coi chuỗi này là một chuỗi"! Nếu không, chuỗi các mục n của bạn sẽ được coi là một chuỗi gồm 1 mục (sẽ là chuỗi các mục của bạn).

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) 
Các vấn đề liên quan