gpt4 book ai didi

Scala - 可以取消申请返回可变参数吗?

转载 作者:行者123 更新时间:2023-12-03 23:27:03 25 4
gpt4 key购买 nike

对象 L1下面的作品。我可以“创建”一个 L1通过传入可变参数,这很好,但我希望能够分配给 L1使用相同的语法。不幸的是,我在这里完成的方式需要更丑陋的嵌套 Array 的语法。内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可以吗?以这种方式使用可变参数?

最佳答案

我认为你想要的是 unapplySeq。 Jesse Eichar 在 unapplySeq 上写得很好

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

关于Scala - 可以取消申请返回可变参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6501021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com