Возврат типа ITERABLE в Eiffel

Я пытаюсь вернуть тип результата ITERABLE[K]. Все, что я знаю, это то, что Iterable наследуется от ITERATION_CURSOR, поэтому я сделал следующий неработающий код, но он не компилируется.

obtainKey (v: V): ITERABLE[G]
    local
        myCollection: ITERABLE [G]
        myCursor:ITERATION_CURSOR[G]
    do
        create {ITERABLE[G]} myCursor
        Result := myCursor

Я предполагаю, что мне нужно сделать что-то вроде следующего, если это был С++ или Java,

ITERATION_CURSOR myCursor = new ITERABLE;

Я не знаю. Мое предположение может быть ошибочным.

Как я могу сделать такие вещи в Eiffel и заставить работать приведенный выше код?


person Miku    schedule 21.10.2017    source источник
comment
Было бы полезно, если бы вы объяснили, чего вы пытаетесь достичь, какова цель кода, что вы от него ожидаете. Просто заставить его скомпилировать - это не то же самое, что заставить его работать (в ваших терминах). В частности, зачем здесь аргумент v, как предполагается использовать функцию obtain_key и т.д.?   -  person Alexander Kogtenkov    schedule 22.10.2017


Ответы (1)


Класс ITERABLE является отложенным классом (абстрактным в java), и отложенный класс не может быть создан. Вы должны использовать класс, который не отложен и наследуется от класса ITERABLE. Обратите внимание, что класс ITERATION_CURSOR также отложен. Что использовать, может меняться в зависимости от того, что вам нужно в вашей реализации. Вот пример использования LINKED_LIST:

obtain_key (v:V): ITERABLE[G]
    local
        my_list:LINKED_LIST[G]
    do
        create my_list.make
        Result := my_list
    end
person Louis M    schedule 22.10.2017