在辅助构造函数中传递varargs

ran*_*ath 6 constructor scala variadic-functions

我有一个带有构造函数的类,它由一个Charset和一个String类型的变量组成.我想要一个只有vararg的方便构造函数,它将使用defaultCharset和vararg调用主构造函数.

class StringMessage(charset: Charset, frames: String*) {
  def this(frames: String*) = this(Charset.defaultCharset, frames)
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我所展示的课程有两个错误:

called constructor's definition must precede calling constructor's definition
Run Code Online (Sandbox Code Playgroud)

overloaded method constructor StringMessage with alternatives:
  (frames: String*)mypackage.StringMessage <and>
  (charset: java.nio.charset.Charset,frames: String*)mypackage.StringMessage
 cannot be applied to (java.nio.charset.Charset, String*)
  def this(frames: String*) = this(Charset.defaultCharset, frames)
                              ^
Run Code Online (Sandbox Code Playgroud)

模拟这种情况的最佳方法是什么?

om-*_*nom 13

我相信这:_*会奏效

class StringMessage(charset: Charset, frames: String*) {
  def this(frames: String*) = this(Charset.defaultCharset, frames: _*)
}
Run Code Online (Sandbox Code Playgroud)

它指示编译器扩展Seq,所以它看起来像你写的:

this(Charset.defaultCharset, frames(0), frames(1), .... 
Run Code Online (Sandbox Code Playgroud)