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) = ...
}

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...