scripting:tutorials:level2:functions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige ÜberarbeitungNächste ÜberarbeitungBeide Seiten, nächste Überarbeitung | ||
scripting:tutorials:level2:functions [2023/09/09 13:19] – fritz_98 | scripting:tutorials:level2:functions [2023/09/09 17:17] – [Zu viele und zu wenige Parameter] fritz_98 | ||
---|---|---|---|
Zeile 24: | Zeile 24: | ||
Es handelt sich dabei nur um eine alternative Schreibweise, | Es handelt sich dabei nur um eine alternative Schreibweise, | ||
- | Das gleiche Prinzip funktioniert auch, wenn ein Table als einziger Parameter erwartet wird. Wir definieren eine Funktion, die eine Person etwas sagen lässt: | + | Das gleiche Prinzip funktioniert auch, wenn ein Table als einziger Parameter erwartet wird. Wir definieren eine Funktion, die eine Person etwas sagen lässt |
<code lua> | <code lua> | ||
-- _WhoAndWhat ist ein Table, das eine Person und einen Text enthalten kann, aber nicht muss | -- _WhoAndWhat ist ein Table, das eine Person und einen Text enthalten kann, aber nicht muss | ||
Zeile 201: | Zeile 201: | ||
werden nur die ersten drei beachtet und addiert, der Rest verworfen. Die Funktion hat keine Möglichkeit, | werden nur die ersten drei beachtet und addiert, der Rest verworfen. Die Funktion hat keine Möglichkeit, | ||
- | Der Nutzen, den man daraus ziehen kann, ist eingeschränkt. Im Artikel zur [[ scripting: | + | Der Nutzen, den man daraus ziehen kann, ist eingeschränkt. Im Artikel zur [[ scripting: |
<code lua> | <code lua> | ||
local Numbers = {3, 25, 14, 9, 11, 17, 36} | local Numbers = {3, 25, 14, 9, 11, 17, 36} | ||
Zeile 252: | Zeile 252: | ||
Auch hier ist wieder zu beachten, dass zu wenige Argumente nicht per se als Fehler gelten und als Problemursache häufig versteckt auftreten. In unserem Beispiel mit der Summe können damit aber alle Parameter optional gemacht werden, sodass die nicht zwingend besetzt werden müssen. | Auch hier ist wieder zu beachten, dass zu wenige Argumente nicht per se als Fehler gelten und als Problemursache häufig versteckt auftreten. In unserem Beispiel mit der Summe können damit aber alle Parameter optional gemacht werden, sodass die nicht zwingend besetzt werden müssen. | ||
- | **Achtung**: | + | **Achtung**: |
Diesem Prinzip folgt beispielsweise die aus [[ scripting: | Diesem Prinzip folgt beispielsweise die aus [[ scripting: | ||
Zeile 298: | Zeile 298: | ||
=====Beliebig viele Parameter===== | =====Beliebig viele Parameter===== | ||
+ | |||
+ | In manchen Situationen ist es nützlich, eine Funktion mit beliebig vielen Parametern aufrufen zu können. Die Funktion soll dann einfach mit allen Parametern, die sie bekommt, arbeiten. | ||
+ | |||
+ | Ein Beispiel dafür kann eine Funktion sein, die aus allen Zahlen, die sie als Argumente erhält, eine Summe bildet. Auf herkömmlichem Weg kann man nur eine endliche Menge an Parametern definieren, die jederzeit überschritten werden kann. Zwangsläufig muss der Weg über Tables führen, die beliebig groß sein können: | ||
+ | <code lua> | ||
+ | function Sum(_Numbers) | ||
+ | local Result = 0 | ||
+ | for _, Number in ipairs(_Numbers) do | ||
+ | Result = Result + Number | ||
+ | end | ||
+ | return Result | ||
+ | end | ||
+ | |||
+ | print(Sum{3, | ||
+ | </ | ||
+ | |||
+ | Es gibt in Lua aber auch eine Schreibweise, | ||
+ | <code lua> | ||
+ | function Sum(...) | ||
+ | for _, Number in ipairs(arg) do | ||
+ | Result = Result + Number | ||
+ | end | ||
+ | return Result | ||
+ | end | ||
+ | |||
+ | -- Beachte den Unterschied zu oben: Hier wird kein Table als Argument überreicht, | ||
+ | -- hintereinander! | ||
+ | print(Sum(3, | ||
+ | </ | ||
+ | **Hinweis**: | ||
+ | |||
+ | Das lässt sich auch mit festen Parametern kombinieren. In der folgenden Beispielfunktion wollen wir in ein bestehendes Table alle angegebenen Werte einfügen: | ||
+ | <code lua> | ||
+ | MyTable = {3, 25, 14} | ||
+ | |||
+ | function MultiInsert(_Table, | ||
+ | for _, Value in ipairs(arg) do | ||
+ | table.insert(_Table, | ||
+ | end | ||
+ | end | ||
+ | |||
+ | MultiInsert(MyTable, | ||
+ | </ | ||
+ | Nach dem Aufruf hat '' | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Im nächsten Kapitel bleiben wir bei Funktionen und versuchen, mit Rekursionen zu arbeiten. | ||
+ | |||
+ | [[ scripting: | ||
+ | [[ scripting: | ||
+ | [[ scripting: |
scripting/tutorials/level2/functions.txt · Zuletzt geändert: 2024/05/17 10:02 von fritz_98