Eiffel: Есть ли способ протестировать данный параметр Generic класса без какого-либо его прикрепленного экземпляра? - PullRequest
0 голосов
/ 19 октября 2018

Есть ли способ протестировать данный общий параметр класса без какого-либо его прикрепленного экземпляра?

class BAG[G -> MOUSE]

feature -- 

    discriminate
        do
            if G.conforms_to (MAMMAL) then
                io.putstring ("you gave me a real animal")
            elseif G.conforms_to (COMPUTER_ACCESSORY) then
                io.putstring ("Seems you don't like animals such as computers")
            else
                io.pustring ("Still dont know what you are dealing with")
            end
        end

1 Ответ

0 голосов
/ 19 октября 2018

Ты почти прибил это.Отсутствующая часть - это фигурные скобки и скобки:

        if ({G}).conforms_to ({MAMMAL}) then
            io.put_string ("You gave me a real animal.")
        elseif ({G}).conforms_to ({COMPUTER_ACCESSORY}) then
            io.put_string ("Seems you don't like animals such as computers.")
        else
            io.put_string ("Still don't know what you are dealing with.")
        end

Объяснение:

  1. {FOO}, где FOO - имя типа, обозначает объект типа.Он работает для любого типа, включая формальные обобщения, таким образом, {G} и {MAMMAL}.
  2. Синтаксис {FOO}.bar зарезервирован для необъектных вызовов.Но здесь мы хотим вызов объекта для объекта типа.Поэтому {G} заключено в круглые скобки: ({G}).conforms_to (вместо {G}.conforms_to).
...