(的无效)
在单位的curried函数中部分替换参数的最佳方法是什么:
trait Expr[A] { def apply : A }
type Reaction[A] = A => Unit
type TypedReactor[A] = Expr[A] => Reaction[A] // aka Expr[A] => A => Unit
type FlatReactor = () => () => Unit
def flatten[A](e: Expr[A], r: TypedReactor[A]): FlatReactor = ???
因此,一个有条理的Function1
需要从左到右转换为一个有条件的Function0
。
以下作品,但看起来很尴尬:
def flatten[A](e: Expr[A], r: TypedReactor[A]): FlatReactor = () => {
val unc = r(e); val eval = e.apply; () => unc(eval)
}
修改
抱歉,有一个错误。展平功能实际上如下所示:
def flatten[A](e: Expr[A], r: Reaction[A]): FlatReactor = () => {
val eval = e.apply; () => r(eval)
}
所以我认为它不会比这简单。
答案 0 :(得分:1)
只需将各种val直接替换为单个表达式即可:
def flatten[A](e: Expr[A], r: TypedReactor[A]): FlatReactor =
() => () => r(e)(e.apply)
哪个看起来不错?