在scala中使用可变长度参数

Moh*_*deh 10 scala

我知道如何定义一个带有可变长度参数的方法:

  case class taxonomy(vocabularies:(String,Set[String])*)
Run Code Online (Sandbox Code Playgroud)

和客户端代码非常干净:

  val terms=taxonomy("topics"->Set("economic","politic")
                   ,"tag"->Set("Libya","evolution")
                   )
Run Code Online (Sandbox Code Playgroud)

但我想知道当我有一个变量(而不是变量序列)时,我如何使用这个案例类,如下所示:

val notFormattedTerms = Map("topics"->Set("economic","politic")
       ,"tag"->Set("Libya","evolution"))
Run Code Online (Sandbox Code Playgroud)

Deb*_*ski 24

taxonomy(notFormattedTerms.toSeq:_*)
Run Code Online (Sandbox Code Playgroud)

随着: _*你几乎变换序列参数,所以它看起来仿佛几个参数已经传递到可变长度的方法.但是,这种转换仅适用于(有序?)简单序列类型,并且在本例中不适用于a Map.因此,必须先使用明确的toSeq.

  • 我还没有看到为什么这些转换没有隐含地进行(如果适用). (4认同)
  • 我想这会让人感到困惑. (3认同)