在Scala中将无限参数从函数传递给函数

时间:2015-07-04 16:38:02

标签: scala arguments

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

在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

1 个答案:

答案 0 :(得分:4)

有了这个:

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

你可以按照以下方式扩展参数:

processInfParams(output, params:_*)

使用:_*后面的params