任意函数都有一个 Wrapper 类。我试图用两个类型参数[I,O](用于输入和输出)来抽象函数的输入和输出(返回值)。
class Wrapper[I, O](protected val f: I => O {
protected def doIt(input: I): O = f(input)
}
由于这应该是任意函数的包装器,因此我对采用多个参数的函数有疑问。
val multiplyFunction = (a: Int, b: Int) => a * b
val multiplyWrapper = new Wrapper[(Int, Int), Int](multiplyFunction)
第二行无法编译,因为包装器需要一个函数,该函数接受一个具有两个 Int 的元组作为唯一参数。
有没有办法重写它,这样无论有多少参数我都可以抽象函数的参数?理想情况下,编译器的解决方案将是类型安全的。
也许我有一种替代方法,可以在创建实例时使用元组来指定包装器的类型。
我希望我不必像 Tuple 类 Tuple2 到 TupleN 或 Function2 到 FunctionN 那样写它。我不知道这方面的所有细节,但这看起来更像是一种解决方法,而不是一个抽象/通用的解决方案。