Scala 用n种类型调用泛型函数n次的最佳方法
我需要用n种不同的类型调用一个泛型函数n次。是否可以在类型列表中循环并使用循环中的每个类型调用函数,而不是编写n个函数调用语句?如果没有,还有其他简洁的方法吗 示例代码:Scala 用n种类型调用泛型函数n次的最佳方法,scala,Scala,我需要用n种不同的类型调用一个泛型函数n次。是否可以在类型列表中循环并使用循环中的每个类型调用函数,而不是编写n个函数调用语句?如果没有,还有其他简洁的方法吗 示例代码: //现在 函数[Type1]() 函数[Type2]() … 函数[Typen]() //想要这样的吗 val types=列表(类型1、类型2、…、类型N) 对于(type案例1:如果函数不接受依赖于类型参数的隐式参数,比如def function[A]()(implicit foo:foo[A]),那么调用实际上不能做任何
//现在
函数[Type1]()
函数[Type2]()
…
函数[Typen]()
//想要这样的吗
val types=列表(类型1、类型2、…、类型N)
对于(type案例1:如果函数不接受依赖于类型参数的隐式参数,比如def function[A]()(implicit foo:foo[A])
,那么调用实际上不能做任何不同的事情,您可以将其编写为
for (_ <- 0 to n) {
function[SomeArbitraryType]()
}
通过这种方式,function()(foo)
的类型参数将被推断为Any
,但它实际上与函数的执行无关;只有隐式参数的值起作用
对于classTag
s,可能有一个方便的函数来获取隐式值,例如classTag
,但是隐式调用将适用于任何Foo
总之:类型擦除是您在这里最好的朋友
编辑:当然,案例2的代码比最初的代码要多,但是如果您的函数实际上具有与每次调用相同的非隐式参数,则可能更合理。案例1:如果函数不接受取决于类型参数的隐式参数,例如def function[A]()(隐式foo:foo[A])
,则调用实际上不能做任何不同的事情,您可以将其编写为
for (_ <- 0 to n) {
function[SomeArbitraryType]()
}
通过这种方式,function()(foo)
的类型参数将被推断为Any
,但它实际上与函数的执行无关;只有隐式参数的值起作用
对于classTag
s,可能有一个方便的函数来获取隐式值,例如classTag
,但是隐式调用将适用于任何Foo
总之:类型擦除是您在这里最好的朋友
编辑:当然,案例2的代码比最初的代码要多,但如果您的函数实际上具有非隐式参数,并且每个调用都相同,则可能更合理。也许TypeTags可以帮助您?我不确定这是否是最好的做法,但为什么不只是列出函数?这里的用例不是很清楚。也许TypeTags可以帮你吗?我不确定这是最好的做法,尽管为什么不只是列出函数?这里的用例不是很清楚。
val foos = List(implicitly[Foo[Type1]].asInstanceOf[Foo[Any]], ...)