微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala – 前缀一元运算符

我最近向 Scala提供了第二次机会,并从我始终实施的功能(功能或伪功能语言)开始:命题逻辑的自动推理器(以及后来的谓词逻辑).

现在,我已经尝试在语言本身中尽可能地获得命题逻辑的符号,而且我已经得到了一个隐含的转换(String – > Atom):

("A" and "B") implies "C"

函数“和”和“暗示”(和“或”和“等价”)是调用相关案例类构造函数的简单方法.但是,当执行“not”时,我被卡住了以下两个符号之一:

("A" and "B").not
Not("A" and "B")

有没有办法来欺骗Scala接受所需的:

not("A" and "B")

最好不要将“不”改为“不”,因为我以后可能会称它为“¬”或其他东西.

解决方法

截至2014年2月,我认为在表达式上定义前缀不操作的最简单的方法是避免各种额外的cruft / wrap,将直接在包范围内声明函数以及所有其他函数,类,类型等:这是通过定义一个包对象来完成的(Scala不允许你把函数放在.scala文件的根级别上)(我想知道为什么只是跟随Java的脚步声? )).

package org.my.logiclib

implicit class Atom(s: String) { ... }
class MyType1
class MyType2

object `package` {
  def not(expr: Expr) = ...
}

这样做,导入org.my.logiclib._将导入所有内容,包括not().

以上是一样的

package org.my

package logiclib {
  implicit class Atom ...
  ...

  def not(expr: Expr) = ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐