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 ……的实现方式与我在这里实现的方式大致相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |