Scala - a all ddychwelyd varargs yn anghymwys?

Gwrthrych L1 isod yn gweithio. Gallaf "greu" L1 trwy basio mewn varargs, sy'n braf, ond hoffwn allu aseinio i L1 gan ddefnyddio'r un gystrawen. Yn anffodus, mae'r ffordd rydw i wedi'i wneud yma yn gofyn am gystrawen fwy llyfn nythu Array y tu mewn i'r L1 .

object L1 {
    def apply(stuff: String*) = stuff.mkString(",")
    def unapply(s: String) = Some(s.split(","))
}
val x1 = L1("1", "2", "3")
val L1(Array(a, b, c)) = x1
println("a=%s, b=%s, c=%s".format(a,b,c))

Ceisiais gyflawni hyn mewn ffordd sy'n ymddangos yn ffordd amlwg, fel yn L2 isod:

object L2 {
    def apply(stuff: String*) = stuff.mkString(",")
    def unapply(s: String) = Some(s.split(","):_*)
}
val x2 = L2("4", "5", "6")
val L2(d,e,f) = x2
println("d=%s, e=%s, f=%s".format(d,e,f))

Ond mae hyn yn rhoi'r gwall:

error: no `: _*' annotation allowed here 
(such annotations are only allowed in arguments to *-parameters)`.

A yw'n bosibl i yn anghymwys ddefnyddio varargs fel hyn?

13
задан dhg 28 June 2011 в 02:45
поделиться