Scala中自定义类型的一元运算符定义

时间:2016-06-26 00:39:14

标签: scala operator-overloading anonymous-function

刚刚学习Scala。

试过这个:

def!def! :Int => Boolean =(p:Int => Boolean)=> !P

获取编译器错误:

  
    

[错误]值unary_!不是Int =>的成员布尔
    [错误] def! :Int => Boolean =(p:Int => Boolean)=> !p

  

错误突出显示为“!p”

编译器是否应该自动判断p的结果是否为布尔值?

提前致谢

编辑:根据评论,尝试了以下内容。尽管如此,我还是尝试了解如何定义一元运算符

def anary_! :Int => Boolean =(p:Int => Boolean)=> !(第(_))

仍然在“!(p(_))”

处收到编译器错误

1 个答案:

答案 0 :(得分:4)

也许你打算这样:

scala> class C(p: Int => Boolean) { def unary_! : Int => Boolean = !p(_) }
defined class C

scala> val c = new C(i => i < 0)
c: C = C@4d9cad9d

scala> (!c)(42)
res0: Boolean = true