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

标签 scala operator-overloading anonymous-function

尝试运行这段代码:

定义! : Int => Boolean = (p : Int => Boolean) => !p

有编译错误:

[error] value unary_! is not a member of Int => Boolean  
[error]   def ! : Int => Boolean = (p : Int => Boolean) => !p  

为“!p”突出显示错误

编译器不应该自动找出 p 的结果是一个 Boolean 吗?

提前致谢

编辑:根据评论,还尝试了以下操作。已经使用其他方法完成了我的任务,但是,我正在尝试学习如何定义一元运算符

def unary_! : Int => Boolean = (p : Int => Boolean) => !(p(_))

仍然在 "!(p(_))" 处遇到编译器错误

最佳答案

也许你打算这样:

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

关于scala - Scala 中自定义类型的一元运算符定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38034224/

相关文章:

scala - 如果使用sbt,是否需要单独安装Scala?

scala - Spark流从Twitter获取数据并保存到Cassandra

c++ - 为什么有些运算符只能作为成员函数重载,其他的作为友元函数重载,而其余的则两者都重载?

java - 泛型实例化和 Lambdas

memory-leaks - 匿名函数内存泄漏

scala - 在 Spark-Scala 中将 Dataset[Row] 转换为 RDD[Array[String]] 的最佳方法?

c++ - 何时实现非常量转换运算符

c++ - 为什么重载的 ' operator < ' 应该是类的常量?

javascript - 在 JavaScript 中对事件处理程序使用粗箭头语法不起作用

Scala 3 - 使用产品进行泛型编程