gpt4 book ai didi

python - 是否有 Python list unpack (a.k.a. "*") 运算符的 Scala 等价物?

转载 作者:IT老高 更新时间:2023-10-28 20:33:03 26 4
gpt4 key购买 nike

在 Python 中,我们有星号(或“*”或“解包”)运算符,它允许我们解包列表,以便在传递位置参数时方便使用。例如:

range(3, 6)
args = [3, 6]
# invokes range(3, 6)
range(*args)

在这个特定的例子中,它并没有节省多少输入,因为 range 只需要两个参数。但是您可以想象,如果 range 有更多参数,或者如果 args 是从输入源读取的、从另一个函数返回的等等,那么这可能会派上用场.

在 Scala 中,我无法找到等效的。考虑在 Scala 交互式 session 中运行的以下命令:

case class ThreeValues(one: String, two: String, three: String)

//works fine
val x = ThreeValues("1","2","3")

val argList = List("one","two","three")

//also works
val y = ThreeValues(argList(0), argList(1), argList(2))

//doesn't work, obviously
val z = ThreeValues(*argList)

除了val y中使用的方法,还有更简洁的方法吗?

最佳答案

scala 中没有直接的等价物。您会发现最接近的是 _* 的用法,它仅适用于 vararg 方法。例如,这里是一个可变参数方法的例子:

def hello( names: String*) {
println( "Hello " + names.mkString(" and " ) )
}

可以与任意数量的参数一起使用:

scala> hello()
Hello
scala> hello("elwood")
Hello elwood
scala> hello("elwood", "jake")
Hello elwood and jake

现在,如果你有一个字符串列表并且想将它们传递给这个方法,解压它的方法是通过_*:

scala> val names = List("john", "paul", "george", "ringo")
names: List[String] = List(john, paul, george, ringo)
scala> hello( names: _* )
Hello john and paul and george and ringo

关于python - 是否有 Python list unpack (a.k.a. "*") 运算符的 Scala 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15034565/

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