给定任意大小的Seq [Any],如何在参数类型不同的情况下使用此函数调用函数,例如Int,String

Phi*_*hil 0 scala

我正在为任何数量的参数寻找一种通用的解决方案(我可以说实际上并不是超过15个参数),我有一个函数。

def test(a: String, b: Int): Int = 0
Run Code Online (Sandbox Code Playgroud)

我有一个Seq [Any]。

val seq: Seq[Any] = Seq("Hi", 5)
Run Code Online (Sandbox Code Playgroud)

如何使用此seq作为参数调用功能测试?

现在,我尝试了一下,test(seq:_*)但是那不起作用,因为它与函数类型不匹配,编译器无法理解要使用哪个函数。

Scala宏在这里有用吗?

(您正在查看并思考,这是一个坏主意,为什么首先要使用Seq [Any]?它的坏习惯,是的,但这是一个问题,我不是在问它是否是一个好主意。还是不,因为我知道它不好,所以我有一个Seq [Any],然后从那里开始出现问题)

Mar*_*lic 5

不确定此要求是否是一个好主意,但请考虑采用无形方法:

import shapeless._
import HList._
import syntax.std.traversable._

def test(a: String, b: Int): Int = 0
val seq = Seq("Hi", 5)
val tupledSeq = seq.toHList[String::Int::HNil].get.tupled
(test _).tupled(tupledSeq)
Run Code Online (Sandbox Code Playgroud)

哪个输出

res0: Int = 0
Run Code Online (Sandbox Code Playgroud)

注意我们如何创建方法的元组版本 test

(test _).tupled
Run Code Online (Sandbox Code Playgroud)