在 Scala 中将无限参数从一个函数传递到另一个函数

Pass infinite arguments from function to function in Scala

我是 Scala 的新手,最近我遇到了这个问题,我需要用 X 个参数调用函数 A,然后它会用相同的 X 个参数调用函数 B,但问题是我总是得到 "WrappedArray" 等等。

在 Lua 我会简单地这样做:

function processInfArgs(output,...)
    for i,v in ipairs({...}) do
         output[i]=tostring(v) --just example, stringify it
    end
end
function takeInfArgs(...)
    local out = {}
    processInfArgs(out,...)
    return out
end
local result = takeInfArgs(1,2,3.14,"four","five")
for i,v in pairs(result) do
    print(v,type(v))
end

我会得到这个:

1       string
2       string
3.14    string
four    string
five    string

所以我尝试在 Scala 中做这样的事情:

import scala.collection.mutable

object AppMain extends App {
  def processInfParams(output: mutable.ArrayBuffer[Any],params: Any*): Unit ={
    for( param <- params ){
      output += param.toString
    }
  }
  def takeInfParams(params: Any*): mutable.ArrayBuffer[Any] ={
    val output= mutable.ArrayBuffer[Any]()
    processInfParams(output, params) //this somehow converts it to WrappedArray(...)!
    output
  }
  val out = takeInfParams("Param 1","Param 2","Param 3",4,5,6)
  for( thing <- out ){
    println(thing+"\t"+thing.getClass.getName)
  }
}

我明白了:

WrappedArray(Param 1, Param 2, Param 3, 4, 5, 6)    java.lang.String

有了这个:

processInfParams(output, params) //this somehow converts it to WrappedArray(...)!

你可以让params展开如下:

processInfParams(output, params:_*)

通过使用 params 之后的 :_*