【发布时间】:2014-08-05 22:10:05
【问题描述】:
让我们考虑一个具体的例子。我有很多函数接受可变数量的参数,并返回一个Seq[T]。说:
def nonNeg(start: Int, count: Int): Seq[Int] =
Iterator.from(start).take(count).toSeq
对于这些函数中的每一个,我都需要为该函数创建一个“Java 版本”,返回一个 java.util.List[T]。我可以使用以下方法创建上述函数的“Java 版本”:
def javaNonNeg(start: Int, count: Int): java.util.List[Int] =
nonNeg(start, count).asJava
这有点冗长,因为参数列表重复了两次。相反,我想创建一个更高级别的函数,它将nonNeg 形式的函数作为参数(任何数量和类型的参数,返回Seq[T])并返回一个采用相同参数的函数,但返回java.util.List[T]。假设该函数被称为makeJava,那么我就可以编写:
def javaNonNeg = makeJava(nonNeg)
makeJava 可以用Shapeless 能力写入abstracting over arity 吗?如果可以,怎么做,不可以,为什么以及如何做到这一点?
【问题讨论】: