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

Scala的“if … else”可以作为库函数实现吗?

发布时间:2020-12-16 08:50:14 所属栏目:安全 来源:网络整理
导读:我想知道是否可以在Predef中使用特殊的编译器处理来实现… else,类似于使用classOf [A]所执行的操作:定义在Predef中,实现由编译器填充. 当然,很多人都会放心地知道if总是一个if,而另一个总是另一个,无论上下文如何.但是,将else定义为if的结果类型的方法会将
我想知道是否可以在Predef中使用特殊的编译器处理来实现… else,类似于使用classOf [A]所执行的操作:定义在Predef中,实现由编译器填充.

当然,很多人都会放心地知道if总是一个if,而另一个总是另一个,无论上下文如何.但是,将else定义为if的结果类型的方法会将其从关键字列表中删除,并允许库设计者定义自己的else方法. (我知道我可以使用任何关键字作为带反引号的标识符,但是类似`else`的东西在代码中看起来很糟糕.)这些方法在this one,discussed on the mailing list等情况下讨论的情况下非常有用,在这种情况下人们在定义时被迫使用实际应该命名为else的方法. (也在SO here和here上讨论过.)

所以:

>即使在理论上,这种方法是否可行,或者它是否打破了Scala中的一些基本原则?
>缺点是什么?

解决方法

也许我不明白你的问题,但你已经可以实现if … else …作为库函数.考虑一下:

class If[A](condition: =>Boolean)(ifBlock: =>A) {
  def els(elseBlock: =>A):A = condition match {
    case true => ifBlock
    case false => elseBlock
  }
}

new If(2==3)(
  println("equal")
) els (
  println("not equal")
)

当然,如果……其他的话,这并没有做到这一点,但我认为它会有一些抛光.我曾经为一种语言实现了一个非常简单的解释器,该语言具有内置的模式匹配,if … else ……的实现方式与我在这里实现的方式大致相同.

(编辑:李大同)

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

    推荐文章
      热点阅读