次のコードを検討してください。
object HelloIntelliScala {
def main(args : Array[String]) = {
println(callAnyFunc(funcWithNoArgs))
val l = callAnyFuncWithArgs("bingo") (funcWithArgs)
println(l)
val l2 = callAnyFuncWithArgs(21) (funcWithArgs2)
println(l2)
}
type noArgCallBack = () => Any
def funcWithArgs(inp : String) : Any = {
println("Func with arg called, arg value is: " + inp)
"Hello " + inp + "!"
}
def funcWithArgs2(inp : Int) : Any = {
println("Func with arg called, arg value is: " + inp)
"Hello, integer " + inp + "!"
}
//how do i call this function?
def funcWithArgs3(inp : Int, name : String) : Any = {
println("Func with 2 args called, arg values are: " + (inp, name))
"Hello, multiple args " + (inp, name) + "!"
}
def funcWithNoArgs() : Any = {
println("Function with no args was called!")
"Hello NO_ARGS"
}
def callAnyFunc(callback : noArgCallBack) : Any = {
callback();
}
def callAnyFuncWithArgs[A, B](arg : A)(f : A => B) : Any = {
f(arg); //how do I pass variable args here
}
}
引数のない関数と同じように、引数のある関数を呼び出す一般的な方法が必要です。渡される引数リストは可変である可能性があり、コンパイル時に引数のタイプがわからないことに注意してください。また、後処理にこの値を使用する必要があるため、Anyリターンタイプも必要です。これを行う方法はありますか?