2017-10-21 73 views
0

我想返回结果类型为ITERABLE [K]。 我所知道的是,Iterable从ITERATION_CURSOR继承,所以我做了下面的unworking代码,但它不能编译。在埃菲尔返回ITERABLE类型

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; 

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

我该如何在埃菲尔做这样的事情,并让上面的代码工作?

+0

这将有助于如果你能解释你想达到什么样的,代码的目的是什么,你从它的期望。只是让它“编译”与使它“工作”(用你的方式)是不一样的。特别是,为什么会有'v'参数,函数'obtain_key'应该如何使用等等? –

回答

0

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