我写它接受一个可变参数的参数类,并指定其默认设置,以便用户可以经常实例化它没有指定一个参数:为什么不能指定Scala可变参数的默认值?
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*) { }
我想知道为什么它不允许有可变参数的默认值。这里所说的理由或技术原因是什么? (我的猜测是,指定一个空的可变参数将需要一些特殊的语法或习惯用法,但我不确定这是否有足够的原因。)
为什么'def foo(result:Int = 0,xs:String *)= ???'是不可接受的呢?编译器将foo(0,“不可能编译”)识别为合法的构造是完全可行的。 –
@ om-nom-nom,不知道我跟着你。我正在回答为什么我们不想支持'def foo(result:Int = 0,xs:String * = Seq(“some”,“default”))= ???'。 – huynhjl
是的,但编译器在我的情况下放置了相同的限制(至少给我们相同的编译错误),所以我猜可能有其他原因统一这两种情况 –