[英]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)
}
(不包括隐含性和适用性)
我遇到“缺少参数类型”错误的问题。 以下代码正确编译:
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 2.12开始为SAM类型)。 重载方法的参数没有预期的类型,因为首先需要知道其类型才能选择重载。 因此,您需要为这两个!>
方法赋予不同的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.