【发布时间】:2017-04-07 18:43:53
【问题描述】:
我有以下代码:
class Pipe[ A ]( a: A ) {
def |>[ B ]( f: A => B ) = f( a )
def !>[ B ]( f: A => B ) : Try[B] = Try(f( a ))
def !>[ B, C ]( f: B => C )(implicit ev: A =:= Try[B]) : Try[C] = a.map(f)
}
(不包括隐式和应用)
我遇到了“缺少参数类型”错误的问题。 以下代码编译正确:
val r1 = 5 |> (x => x + 1)
但是以下编译失败:
val r6 = 100 !> { x => x * 2 }
除非我写:
val r6 = 100 !> { x : Int => x * 2 }
那么我该如何避免键入函数的需要呢?
我在寻找类似问题的答案。一种解决方案是对函数进行柯里化。但是在这种情况下,我认为问题是类型流动 当 A =:= Try[B] 时,从类 Pip[A] 的类型 A 到 B。
欣赏任何指针。
TIA。
【问题讨论】:
标签: scala compiler-errors type-inference type-parameter