Wie funktioniert die Methode in Groovy?

8

Ich stieß auf diesen Code:

%Vor%

Es wird zum Drucken einer Baumstruktur verwendet. So:

%Vor%

(für n = 4)

  1. Wie generiert der Code [*n..1,n] [4, 3, 2, 1, 4] ?

  2. Wie funktioniert any Methode hier? Der Doc hilft mir nicht sehr . Was ist eine Vorhersage, die an any weitergegeben werden kann (wie in Doc 's)?

Was ist die Verwendung von any und wie wird es in diesem Fall gehandhabt?

    
Ant's 11.12.2011, 17:12
quelle

2 Antworten

10

Q1a: * "entpackt" ein Array. .. erstellt einen Bereich. [] erstellt eine Sammlung.
Q1b: *n..1 packt [4,3,2,1] in seine Einzelteile aus.
Q1c: [4,3,2,1,n] == [4,3,2,1,4]

Q2: Ich weiß nicht warum any hier benutzt wurde; each funktioniert genauso gut und macht im Kontext mehr Sinn. any ist Schleife über die Verbindung, so dass der println Nebeneffekt wie vorgesehen funktioniert.

Normalerweise würde any verwendet, um zu bestimmen, ob irgendwelche Auflistungselemente ein Kriterium erfüllen, zum Beispiel:

%Vor%

Die letzte Aussage der Schließung wird verwendet, um zu bestimmen, ob jeder Gegenstand die Kriterien erfüllt. println gibt null zurück, so dass any den Wert false zurückgibt. Der Wert wird nicht verwendet und verworfen.

Der einzige Grund, warum ich daran denken könnte, dass jemand any verwendet hat, ist, den Rückgabewert von each in der Konsole nicht zu sehen. each gibt die ursprüngliche Sammlung zurück.

    
Dave Newton 11.12.2011, 17:48
quelle
3

1) n..1 wird als Bereichsliteral bezeichnet und erzeugt eine groovy.lang.Range Objekt, das um 1 von n auf 1 dekrementiert. Dies wird dann mit dem " Spread-Operator (* ) "

2) die any Methode ist definiert in DefaultGroovyMethods und es ist eine Prädikatfunktion, die zurückgibt true, wenn ein Element in einer Auflistung die angegebene Prädikatschließung erfüllt. In diesem Beispiel überprüft der Code den Rückgabewert nicht, sodass der ursprüngliche andere unter Verwendung eines each stattdessen aufrufen.

    
btiernay 11.12.2011 17:47
quelle

Tags und Links