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

我想知道是否可以在Predef中使用特殊的编译器处理来实现… else,类似于使用classOf [A]所执行的操作:定义在Predef中,实现由编译器填充.

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

所以:

>即使在理论上,这种方法是否可行,或者它是否打破了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 ……的实现方式与我在这里实现的方式大致相同.

转载注明原文:Scala的“if … else”可以作为库函数实现吗? - 代码日志