Eiffel有一个功能Design by Contract . 根据这一点,对于任何例程,都要检查 require
和 ensure
之类的断言是否必须为真 . 但是,我无法通过命令行找出如何强制执行规则,如果断言为false,则必须存在编译器或运行时抛出的错误/异常 .
例如,如果这是根类,
class
APPLICATION
inherit
ARGUMENTS
create
make
feature {NONE}
object: TEST1
make
-- Run application.
do
create object
object.function(-1)
print(object.value)
end
end
这是 TEST1
类
class
TEST1
feature
value: INTEGER
-- value for testing
function(val: INTEGER)
-- Assign
require
val>0
do
value:=val
ensure
value>0
end
end
即使两个断言都被违反,程序也会编译并执行而不会出现任何错误 .
我正在编译使用
ec application.e
但是,Eiffel Studio确实报告违反 Contract .
那么,如何通过命令行强制执行此操作?是否有特定的标志可供使用?
1 回答
看起来像EiffelStudio的GUI版本和EiffelStudio的命令行版本在创建新项目时使用不同的默认值:命令行版本关闭断言监控,GUI版本打开断言监控 . 实际上,您可以在GUI中打开使用命令行版本创建的项目,或者相反,通过命令行编译器编译在GUI版本中创建的项目 . 项目设置保存在
.ecf
文件中,并且是项目的一部分,即此.ecf
文件应与项目一起分发 .要解决您描述的特定问题,请在GUI中打开
.ecf
(“文件”|“打开项目”|“添加项目”|“打开”),然后导航到“项目”|“项目” . 项目设置|断言,打开所有断言并按Save,退出GUI版本 . 现在,当您从命令行重新编译项目时,将打开断言,并且您将在执行期间按预期获得异常跟踪 .