Scala的“ if…else”是否可以实现为库函数?
|
我想知道是否可以用特殊的编译器处理方法在
Predef
中实现if … else
,类似于用classOf[A]
进行的方式:定义在Predef
中,实现由编译器填充。
当然,无论上下文如何,许多人都会放心地知道if
总是if
,else
总是always6ѭ。但是,将else
定义为结果类型if
的方法会将其从关键字列表中删除,并允许库设计人员定义自己的else
方法。 (我知道我可以在反引号中使用任何关键字作为标识符,但是像ѭ11这样的代码在代码中看起来却很糟糕。)在诸如此类的情况下(在邮件列表上讨论)这种情况下讨论的情况下,这种方法可能很有用。在定义应实际命名为“ 6”的方法时使用“ 12”。 (也在此处和此处对SO进行了讨论。)
所以:
即使从理论上讲,这种方法是否可行,还是打破了Scala的某些基本原理?
不利之处是什么?
没有找到相关结果
已邀请:
4 个回复
誓猎贰
实现为库函数。考虑一下:
当然,这并不能完全像ѭ14那样,但是我认为可以做些打磨。我曾经为一种语言实现了一个非常简单的解释器,该语言内置了模式匹配,并以与我在此处执行的相同方式实现了
。
稳赣苍卯改
折叠选项不能明确完成,但我们一直都这样做。
布尔值上的分支逻辑也是一个折叠,您可以相应地将布尔值转换为布尔值。请注意使用by-name参数来实现延迟评估。如果没有此功能,将无法实现。
现在我们可以折叠布尔值:
葛瞎说漓
,任何语言功能都可以在称为“ Scala Virtualized”的语言分支中覆盖 https://github.com/TiarkRompf/scala-virtualized 这构成了斯坦福大学PPL的Delite项目的基础,也是Scala的欧盟赠款资助的研究的核心。因此,您可以合理地期望它在将来的某个时候成为核心语言的一部分。
纫合峭
只需添加一些隐式转换:
现在我们可以使用它:
[注意:我的打字功很弱。我不得不作弊以使其能够在合理的时间内被编译。某些对Scala的类型系统有更好了解的人可能希望对其进行修复。另外,现在我看一下,8个类,特征和对象(其中两个是抽象的)似乎有点过度设计;-)] 当然,模式匹配也是如此。任何具有模式匹配的语言都不需要其他类型的条件,因为模式匹配反而是更通用的。 [BTW:这基本上是我几年前写的这个Ruby代码的一部分,很有趣。]