gpt4 book ai didi

scala - 为什么无法指定 Scala varargs 参数的默认值?

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

我写了一个类,它接受一个可变参数作为参数,并指定它的默认值,这样用户通常可以在不指定参数的情况下实例化它:

class MyClass(values: Int* = 42) { }

但是,编译器和 REPL 给了我以下错误:
<console>:7: error: type mismatch;
found : Int(42)
required: Int*
class MyClass(values: Int* = 42) { }
^
<console>:7: error: a parameter section with a `*'-parameter is not allowed to have default arguments
class MyClass(values: Int* = 42) { }

作为一种解决方法,我尝试了以下方法,但也没有奏效:(显然很模棱两可。)
class MyClass(value: Int = 42, otherValues: Int*) { }

我想知道为什么不允许使用 varargs 参数的默认值。这里的推理或技术原因是什么? (我的猜测是指定一个空的 varargs 需要一些特殊的语法或习惯用法,但我不确定这是否是一个足够的理由。)

最佳答案

考虑一下,我认为这只是不增加太多复杂性的问题,假设您有

def f(a: A, xs: X* = Seq(x0, x1)) = ???

现在调用者这样使用: f(a) .

我们如何知道调用者是否打算传递 X* 的零长度列表?或者想通过不提供 X* 来触发默认参数?在您的示例中,您假设第二种选择是唯一的情况,并且编译器需要提供默认参数值。但是一个空的 Seq()已经是调用者提供的完全有效的值。我猜来电者可以写 f(a, Seq(): _*)但它很麻烦。

关于scala - 为什么无法指定 Scala varargs 参数的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18328956/

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