Атрибуты класса в 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).

Есть несколько способов решения проблемы в примере, два из них показаны ниже:

  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
    

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

Другие вопросы по тегам