以任意元数的另一个函数为参数的函数
Function taking another function of arbitrary arity as argument
我有一系列接受一个函数作为参数的函数(func
),它们的唯一区别是func
接受不同数量的参数。
def tryGet[T,A](func: (A) => T)
def tryGet[T,A,B](func: (A,B) => T)
... [T,A,B,C...]
有没有办法让函数接受具有任意长度参数列表的函数?
我尝试使用可变长度参数列表,例如 func:(A*)
,但在传递任何函数时遇到问题,因为它现在需要一个 Seq[A]
.
你可以尝试使用shapeless.ops.function.FnToProduct
def tryGet[F: FnToProduct](func: F) = ???
val f1: Int => String = ???
val f2: (Int, Int) => String = ???
val f3: (Int, Int, Int) => String = ???
tryGet(f1)
tryGet(f2)
tryGet(f3)
为什么不直接使用 scala.util.Try?或者只是将参数传递给 tryGet,而不是作为块,而是作为类型 T 的别名参数?
我有一系列接受一个函数作为参数的函数(func
),它们的唯一区别是func
接受不同数量的参数。
def tryGet[T,A](func: (A) => T)
def tryGet[T,A,B](func: (A,B) => T)
... [T,A,B,C...]
有没有办法让函数接受具有任意长度参数列表的函数?
我尝试使用可变长度参数列表,例如 func:(A*)
,但在传递任何函数时遇到问题,因为它现在需要一个 Seq[A]
.
你可以尝试使用shapeless.ops.function.FnToProduct
def tryGet[F: FnToProduct](func: F) = ???
val f1: Int => String = ???
val f2: (Int, Int) => String = ???
val f3: (Int, Int, Int) => String = ???
tryGet(f1)
tryGet(f2)
tryGet(f3)
为什么不直接使用 scala.util.Try?或者只是将参数传递给 tryGet,而不是作为块,而是作为类型 T 的别名参数?