gpt4 book ai didi

java - 是否有可能使函数像 for 循环一样工作?

转载 作者:行者123 更新时间:2023-11-30 01:44:19 25 4
gpt4 key购买 nike

我想知道是否有任何方法可以编写用作“for”循环的自定义方法。由于对对象进行非常不寻常的迭代(好吧,不像典型的迭代那样平常),我每次想使用它时都被迫重写它。

抱歉我的英语和解释不清楚,我不是一个善于交际的人,但我认为下面的示例会正确解释我的问题。下面的代码不是真正的代码,只是一个方案。指针和引用可以使用错误,但我的意思是展示我的概念。

 class Element{
Element *next; // Pointer to the next object
Element *previous; // Pointer to the previous object
// There are also some primitives (int, double etc.) there.

void actionA(int a){ /* sth happpens to the primitives and may affect *next and *previous */ }
void actionB(int b,int c){ /* just like above */ }
// ............. and even more methods

}




void makeActionA(int i){
Element pointer=start.next;
while(pointer!=end){
Element tmp=pointer.next;
pointer.actionA(i); //X
pointer=tmp;
}
}

void makeActionBC(int i,int j){
Element pointer=start.next;
while(pointer!=end){
Element tmp=pointer.next;
pointer.actionB(i,j); //X
pointer.actionC(i,j,i*j); //X
pointer=tmp;
}
}
// AND SO ON

我们可以看到 makeAction 方法的结构除了标有“X”的行之外几乎相同。我想让它更短而不像在“for”循环中那样愚蠢地重复。

   void custom_loop(Element pointer,Element start, Element end){ 
pointer=start.next;
while(pointer!=end){
Element tmp=pointer.next;
{
// Magical function that read the code between the brackets in code.
}
pointer=tmp;

}
}

并使用 custom_loop 将 makeAction 方法替换为更简单的方法

    void makeActionA(int i){
Element t,s,e;
custom_loop(t;s;e){
t.actionA(i);
}
}

void makeActionBC(int i,int j){
Element t,s,e;
custom_loop(t;s;e){
t.actionB(i,j);
t.actionC(i,j,i*j);
}
}

我想到的唯一解决方案是元编程和宏的一些神奇技巧。我不是很喜欢他们,但他们不会吓跑我。我很期待解决方案。非常感谢。再次为我的英语感到抱歉。

最佳答案

在 Java 中,您可以实现接口(interface) Iterable,它允许您使用 for 循环迭代“可迭代”结构:

Element start = ...;
for (Element current : start) {
// do something with current element
}

class Element implements Iterable<Element> {
...

public Iterator<Element> iterator() {
return new ElementIterator(this);
}
}

class ElementIterator implements Iterator<Element> {
private Element current;

ElementIterator(Element start) {
this.current = start;
}

public boolean hasNext() {
return current != null;
}

public Element next() {
Element result = current;
current = current.next;
return result;
}
}

关于java - 是否有可能使函数像 for 循环一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36461696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com