Eiffel中的类属性

时间:2015-09-23 17:06:51

标签: class eiffel void-safety

我正在尝试在Eiffel中创建一个由一些属性和函数组成的类。我一直遇到的问题是setName不可见或者没有正确初始化。编译器错误是:VEVI:未正确设置变量。属性:名称。我希望能够在APPLICATION中实例化TESTER对象并调用这些方法。

class
    TESTER
create
    make

feature

    name: STRING
    score: INTEGER
    make

        do
            io.putstring ("I am making TESTER%N")
        end

        sleep
        do
            io.put_string ("TESTER is sleeping%N")
        end

        setName (name_: STRING)
        do
            name := name_
        end

end

1 个答案:

答案 0 :(得分:2)

这与 void-safety https://www.eiffel.org/doc/eiffel/Void-safe%20programming%20in%20Eiffel)有关。

在示例中有几种方法可以解决这个问题,其中两种方法如下所示:

  1. name声明为detachable。默认情况下,类类型为attached。将类型更改为detachable可以将属性name初始化为默认值Void,即不会附加到任何对象。

    name: detachable STRING
    
  2. 将对象附加到创建过程name中的属性make

    make
        do
            io.putstring ("I am making TESTER%N")
            name := "something"
        end
    
  3. 规则的简化版本表示 所有属性都应在创建过程结束时设置