Атрибуты класса в Eiffel

Я пытаюсь создать класс в Eiffel, состоящий из нескольких атрибутов и функций. Я продолжаю получать проблемы с атрибутами, которые либо не видны для setName, либо неправильно инициализируются. Ошибка компилятора: VEVI: переменная установлена ​​неправильно. Атрибут(ы): имя. Я хочу иметь возможность создавать экземпляр объекта TESTER в APPLICATION и вызывать эти методы.

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

person cadebe    schedule 23.09.2015    source источник


Ответы (1)


Это связано с 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
    

Упрощенная версия правила гласит, что все атрибуты должны быть установлены в конце процедуры создания.

person Jocelyn    schedule 23.09.2015