Wie rekursive Blöcke implementieren?

8

Ich möchte einen Blocktyp deklarieren, der einen Parameter vom selben Blocktyp annimmt. Es ist einfach so:

%Vor%

Ich weiß, dass die Erklärung nicht gültig ist. Aber ich frage mich, ob es eine Möglichkeit gibt, rekursive Blöcke zu implementieren, die nur einen Parameter vom selben Blocktyp haben.

Ich versuche einen Weg zu finden, aspektorientierte Programmierung (AOP) in Objective-C unter Verwendung von Block zu implementieren. Hier sind meine Fragen dazu, wie man das implementiert.

Weitere Frage 1:

Wie man eine variadic Funktion implementiert, die viele der oben beschriebenen Blöcke benötigt und mit nil endet, und Ich könnte diese Funktion mit vielen Blöcken aufrufen, bis sie auf Null trifft? Es wäre so:

%Vor%

Weitere Frage 2:

Was ist, wenn der rekursive Block einen Rückgabewert hat?

Zusätzliche Frage zur Sprache C:

Ist es möglich, eine C-Funktion zu deklarieren, die einen Parameter nimmt, der ein C-Funktionszeiger ist, und dass die Funktion des C-Funktionszeigers auch einen anderen C-Funktionszeiger annimmt?

    
李岡諭 13.09.2013, 17:07
quelle

2 Antworten

11

das könnte ähnlich sein, das Sie suchen:

%Vor%

wird buchstäblich eine unendliche rekursive Schleife verursachen:

%Vor%

aber der Parameter könnte ein beliebiges id nicht nur das exakt gleiche Block sein, sondern auch, wie Sie den gleichen Block als Parameter für den gleichen Block übergeben.

also, das wäre die Idee.

    
holex 13.09.2013, 18:07
quelle
4

Dies ist viel einfacher, wenn Sie den Block in einer __block-Referenz erfassen. Tatsächlich wird die Vorwärtsdeklaration generischer Typen in C einfach nicht unterstützt. Also, das könnte die einzige Lösung sein?

%Vor%

Beachten Sie, dass Sie, wenn Sie planen, diesen Block asynchron zu versenden, ihn vor der Zuweisung kopieren müssen (diese kann unter ARC nicht mehr erforderlich sein):

%Vor%     
bbum 13.09.2013 17:40
quelle

Tags und Links