Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 用n种类型调用泛型函数n次的最佳方法_Scala - Fatal编程技术网

Scala 用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]),那么调用实际上不能做任何

我需要用n种不同的类型调用一个泛型函数n次。是否可以在类型列表中循环并使用循环中的每个类型调用函数,而不是编写n个函数调用语句?如果没有,还有其他简洁的方法吗

示例代码:

//现在
函数[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]], ...)