0

Eiffel具有按合同设计的功能。据此,对于任何例程,都有一个检查断言,如requireensure必须为真。但是,我无法找出如何通过命令行强制执行规则,即如果断言为假,则编译器或在运行时必须抛出错误/异常。

例如,如果这是根类,

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 确实报告了违反合同的行为。

那么,如何通过命令行强制执行呢?是否有特定的标志可以使用?

4

1 回答 1

1

看起来 EiffelStudio 的 GUI 版本和 EiffelStudio 的命令行版本在创建新项目时使用不同的默认值:命令行版本关闭断言监视,GUI 版本打开断言监视。实际上,您可以在 GUI 中打开使用命令行版本创建的项目,或者相反,通过命令行编译器编译在 GUI 版本中创建的项目。项目设置保存在一个.ecf文件中并且是项目的一部分,即该.ecf文件应与项目一起分发。

要解决您描述的特定问题,请.ecf在 GUI 中打开(File | Open Project | Add Project | Open),然后导航到Project | 项目设置 | Assertions,打开所有断言并按Save,退出 GUI 版本。现在,当您从命令行重新编译项目时,断言将被打开,并且您将在执行期间按预期获得异常跟踪。

于 2016-11-05T17:08:42.117 回答