6

varargs をパラメーターとして受け入れるクラスを作成し、そのデフォルトを指定して、ユーザーがパラメーターを指定せずにインスタンス化できるようにします。

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 を指定するには特別な構文またはイディオムが必要になると思いますが、これが十分な理由かどうかはわかりません。)

4

5 に答える 5

6

scala 仕様から (セクション 4.6.2)

パラメータが繰り返されるパラメータ セクションでは、デフォルトの引数を定義することはできません。

多分回避策が役立つでしょうか?

class MyClass(values: Int*) {
  def this() = this(5)
}
于 2013-08-20T07:19:27.447 に答える
3

Scala だけでなく、Varargs は引数のリストの抽象化です。間違いがなければ、引数のSeqリストに脱糖されます。このことから、どのような結果が期待できますvalues: Int* = 42か? 次に、このメソッドを呼び出すとき、このメソッドにどのように引数を渡す必要がありますか?

于 2013-08-20T07:15:06.707 に答える