Атрибуты класса в Eiffel
Я пытаюсь сделать класс в Eiffel, состоящий из нескольких атрибутов и функций. Я продолжаю получать проблемы с атрибутами, которые не видны ни setName, ни неправильно инициализируются. Ошибка компилятора: VEVI: переменная установлена неправильно. Атрибут (ы): имя. Я хочу быть в состоянии создать экземпляр объекта 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 ответ
Это связано с безопасностью void ( 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
Упрощенная версия правила гласит, что все атрибуты должны быть установлены в конце процедуры создания.