加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala – 前缀一元运算符

发布时间:2020-12-16 19:05:41 所属栏目:安全 来源:网络整理
导读:我最近向 Scala提供了第二次机会,并从我始终实施的功能(功能或伪功能语言)开始:命题逻辑的自动推理器(以及后来的谓词逻辑). 现在,我已经尝试在语言本身中尽可能地获得命题逻辑的符号,而且我已经得到了一个隐含的转换(String – Atom): ("A" and "B") impli
我最近向 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) = ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读