【发布时间】:2013-03-04 15:51:05
【问题描述】:
我将 Scala 作为个人项目来学习,因为我厌倦了 Java 的冗长。我喜欢我所看到的很多东西,但想知道是否有一种方法可以有效地在方法上实现一些简单的契约。我不是(必然)在完整的 DbC 之后,但有没有办法:-
表示参数或类字段是必需的,即不能为空。如果存在 OPTIONAL 值,选项似乎清楚地表明,但我想指定类不变量(x 是必需的),并简洁地指定一个参数是必需的。我知道我可以做“如果”抛出某种异常,但我想要这个非常常见的用例的语言功能。我喜欢我的界面紧凑,我不喜欢防御性编程。
是否可以定义简洁高效(运行时性能)的范围类型,例如“NonNegativeInt”——我想说一个参数 >= 0。或者在一个范围内。 PASCAL 有这些类型,我发现它们非常适合传达意图。这是 C、C++、Java 等的一大缺点。当我说 简洁 时,我的意思是我想像普通 int 一样轻松地声明这种类型的变量,而不必每次都新建以及堆上的每个实例。
【问题讨论】:
-
实际上 C 和 C++ 有非负整数:在 google 中查找“unsigned int”。
-
仅供参考:pm.inf.ethz.ch/education/theses/student_docs/Rokas_Matulis/… 开发的编译器插件适用于 2.10.0,但我们还没有以任何方式发布它(还),因为它 - 作为理学硕士的论文 - 并不是很稳定。
-
@om-nom-nom。是的我同意。自从我做 C/C++ 以来已经太久了,但如果我记得的话,它很容易绕过。无论如何,我的“真正”意图(对不起)是询问有用的数字类型,而不仅仅是 NonNegativeInt。一个例子是
DegreesCentigrade,或任何其他特定于域的 - 增加了我喜欢 Pascal 的类型安全性。 -
@mhs:很好。当它成为 Scala 的一部分,或者离开实验室并进入主流使用(维护等)时,我会对使用它非常感兴趣。我对 Scala 的了解越多,我的印象就越深刻:能够混合 DbC 真是太酷了!继续加油!
标签: scala