Class 埃菲尔的属性

Class attributes in Eiffel

我正在尝试在 Eiffel 中制作一个 class,其中包含一些属性和函数。我不断遇到属性对 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

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

有几种方法可以解决示例中的问题,下面显示了其中两种:

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

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

    make
        do
            io.putstring ("I am making TESTER%N")
            name := "something"
        end
    

规则的简化版本说所有属性都应在创建过程结束时设置