我想将诸如:的表达式转换为执行该精确计算a.meth(b)
的类型函数。(A, B) => C
到目前为止,我最好的尝试是沿着这些思路:
def polish[A, B, C](symb: String): (A, B) => C = { (a, b) =>
// reflectively check if "symb" is a method defined on a
// if so, reflectively call symb, passing b
}
然后像这样使用它:
def flip[A, B, C](f : (A, B) => C): (B, A) => C = {(b, a) => f(a,b)}
val op = flip(polish("::"))
def reverse[A](l: List[A]): List[A] = l reduceLeft op
正如您几乎可以看到的,它非常难看,您必须“手动”进行大量类型检查。
有替代方案吗?