我是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
答案 0 :(得分:4)
有了这个:
processInfParams(output, params) //this somehow converts it to WrappedArray(...)!
你可以按照以下方式扩展参数:
processInfParams(output, params:_*)
使用:_*
后面的params
。