我有以下代码:
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 =:=时,从类Pip [A]的A类到B =尝试[B]。
欣赏任何指针。
TIA。
答案 0 :(得分:2)
您可以省略匿名函数的参数类型的唯一情况是在具有预期类型的上下文中使用它时,此预期类型是函数类型(或者,从Scala 2.12开始,SAM类型)。重载方法的参数没有预期的类型,因为首先需要知道其类型以选择重载。因此,您需要为两个!>
方法指定不同的名称。