在 Eiffel 中返​​回 ITERABLE 类型

Returning ITERABLE type in Eiffel

我正在尝试 return 结果类型为 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

我的猜测是,如果它是 c++ 或 Java,

,我必须执行以下操作
ITERATION_CURSOR myCursor = new ITERABLE;

我不知道。我的假设可能是错误的。

我怎样才能在 Eiffel 中做这种事情并使上面的代码工作?

ITERABLE class是一个延迟的class(java中的抽象)并且无法创建延迟的class。您必须使用未延迟且继承自 ITERABLE class 的 class。请注意 ITERATION_CURSOR class 也被推迟。使用什么可以根据您在实施中的需要而改变。这是一个使用 LINKED_LIST:

的例子
obtain_key (v:V): ITERABLE[G]
    local
        my_list:LINKED_LIST[G]
    do
        create my_list.make
        Result := my_list
    end