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 类型).重载方法的参数没有预期的类型,因为首先需要知道它的类型才能选择重载。所以你需要给这两个!>
方法起不同的名字。
我有以下代码:
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 类型).重载方法的参数没有预期的类型,因为首先需要知道它的类型才能选择重载。所以你需要给这两个!>
方法起不同的名字。