我正在尝试在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
答案 0 :(得分:2)
这与 void-safety (https://www.eiffel.org/doc/eiffel/Void-safe%20programming%20in%20Eiffel)有关。
在示例中有几种方法可以解决这个问题,其中两种方法如下所示:
将name
声明为detachable
。默认情况下,类类型为attached
。将类型更改为detachable
可以将属性name
初始化为默认值Void
,即不会附加到任何对象。
name: detachable STRING
将对象附加到创建过程name
中的属性make
。
make
do
io.putstring ("I am making TESTER%N")
name := "something"
end
规则的简化版本表示 所有属性都应在创建过程结束时设置 。