In TL-Script lassen sich Berechnungen besonders elegant als Verarbeitungsketten schreiben, bei denen jeder Ausdruck eine Weiterverarbeitung des Ergebnisses des vorangegangenen Ausdrucks darstellt.
$projects .get(`...#milestones`) .filter(m -> $m.get(`...#open`)) ...
Manchmal benötigt man aber das Ergebnis des vorangegangenen Ausdrucks mehr als einmal - nicht nur als Eingabe an die nächste Funktion. In diesem Fall muss man den Ausdruck umbauen - Einpacken in einen Block, zuweisen des bisherigen Ergebnisses an eine Variable und mit der Variable weiterrechnen.
{
$openMilestones = $projects
.get(`...#milestones`)
.filter(m -> $m.get(`...#open`));
// Use $openMilestones in computation of result - potentially twice.
}
Netter wäre, wenn man einen solchen Ausdruck, der auf das gesamte bisherige Ergebnis mehr als einmal zugreifen kann - es also an eine Variable bindet, auch in der Kette formulieren könnte, ohne den Ausdruck davor umbauen zu müssen:
$projects .get(`...#milestones`) .filter(m -> $m.get(`...#open`)) .with(openMilestones -> ... $openMilestones ... $openMilestones )
Die with()-Funktion erwartet eine Funktion und übergibt ihre Eingabe komplett an diese Funktion. Damit nimmt sie in der Kette eine ähnliche Aufgabe wie map() wahr. Im Unterschied zu map() werden aber nicht die Teilergebnisse transformiert, sondern das gesamte Ergebnis und das Endergebnis ist auch nicht zwingend eine Liste wie bei map(), sondern genau das Ergebnis der inneren Funktion.