Scala 在类型 class 运算符中缺少参数类型

Scala missing parameter type in type class operator

我有以下代码:

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)
}

(不包括隐式和应用)

我遇到了 "missing parameter type" 错误的问题。 以下代码编译正确:

val r1 = 5 |> (x => x + 1)

但是以下编译失败:

val r6 = 100 !> { x  => x * 2 } 

除非我写:

val r6 = 100 !> { x  : Int => x * 2 }

那么我该如何避免输入函数的需要呢?

我在寻找类似问题的答案。一种解决方案是柯里化函数。但是在这种情况下,我认为问题在于类型流动 当 A =:= Try[B] 时,从 class Pip[A] 的类型 A 到 B。

感谢任何指点。

TIA。

唯一可以省略匿名函数参数类型的情况是当它在具有预期类型的​​上下文中使用时,并且该预期类型是函数类型(或者,从 Scala 2.12 开始,SAM 类型).重载方法的参数没有预期的类型,因为首先需要知道它的类型才能选择重载。所以你需要给这两个!>方法起不同的名字。