我正在为任何数量的参数寻找一种通用的解决方案(我可以说实际上并不是超过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],然后从那里开始出现问题)
不确定此要求是否是一个好主意,但请考虑采用无形方法:
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)