Scala-可以不应用地返回varargs吗?

Scala-可以不应用地返回varargs吗?,scala,variadic-functions,unapply,Scala,Variadic Functions,Unapply,下面的对象L1起作用。我可以通过传入varargs来“创建”一个L1,这很好,但我希望能够使用相同的语法分配给L1。不幸的是,我在这里的做法要求在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

下面的对象
L1
起作用。我可以通过传入varargs来“创建”一个
L1
,这很好,但我希望能够使用相同的语法分配给
L1
。不幸的是,我在这里的做法要求在
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))
我试图以一种显而易见的方式完成这一点,如下面的
L2

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))
但这就产生了错误:

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

unapply
可以这样使用varargs吗?

我想你想要的是unplyseq。Jesse Eichar写了一篇关于

scala> object L2 {
     |     def unapplySeq(s: String) : Option[List[String]] = Some(s.split(",").toList)
     |     def apply(stuff: String*) = stuff.mkString(",")
     | }
defined module L2

scala> val x2 = L2("4", "5", "6")
x2: String = 4,5,6

scala> val L2(d,e,f) = x2
d: String = 4
e: String = 5
f: String = 6