gpt4 book ai didi

Scala:为什么一个方法不能有多个可变参数?

转载 作者:行者123 更新时间:2023-12-04 21:52:02 24 4
gpt4 key购买 nike

谁能告诉我为什么存在这个限制?它与JVM或Scala编译器有关吗?

$ scala
Welcome to Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_79).
Type in expressions to have them evaluated.
Type :help for more information.

scala> def toText(ints: Int*, strings: String*) = ints.mkString("") + strings.mkString("")
<console>:7: error: *-parameter must come last
def toText(ints: Int*, strings: String*) = ints.mkString("") + strings.mkString("")

最佳答案

如果您使用多个参数列表(柯里化(Currying)语法),Scala 中的方法可以有多个可变参数:

scala> def toText(ints: Int*)(strings: String*) = 
ints.mkString("") + strings.mkString("")

scala> toText(1,2,3)("a", "b")

res0: String = 123ab

更新:单个参数列表中的多个 varargs 会产生语法问题 - 编译器如何知道给定参数属于哪个参数(一个参数列表在哪里结束,下一个从哪里开始,特别是如果它们是兼容类型的?) .

从理论上讲,如果修改了语言的语法以便可以区分第一个和第二个参数列表(没有柯里化(Currying)),那么这没有理由在 JVM 级别不起作用,因为 varargs 无论如何都只是编译成一个数组。

但我非常怀疑这是一个足够普遍的案例来证明进一步复杂化语言是合理的,尤其是在已经存在解决方案的情况下。

另见 this related Java questionanswer .

关于Scala:为什么一个方法不能有多个可变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30133367/

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