Ich stieß auf diesen Code:
%Vor%Es wird zum Drucken einer Baumstruktur verwendet. So:
%Vor% (für n
= 4)
Wie generiert der Code [*n..1,n]
[4, 3, 2, 1, 4]
?
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?
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:
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.
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.
Tags und Links groovy jvm-languages