Frage zur Fat-Arrow-Funktion Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

355 113
Posts: 8
Joined: 15 Jun 2019, 04:12

Frage zur Fat-Arrow-Funktion

11 Apr 2023, 09:31

Auf https://ahkde.github.io/docs/v2/Variables.htm#fat-arrow wird ein Beispiel gegeben:

Code: Select all

sumfn := Sum(a, b) => a + b
welches ich hiermit testen wollte:

Code: Select all

#Requires AutoHotkey v2.0
a := 2
b := 3
sumfn := Sum(a, b) => a + b
MsgBox sumfn
Statt einer 5 bekam ich jedoch "Error: Parameter #1 of MsgBox requires a String, but received a Func."
Ok, Func ist anscheinend irgendwie metaphysisch "die Summe an sich" und nicht das Ergebnis der Summe.
In der Hilfe steht weiterhin: "Wenn die Funktion aufgerufen wird (über die zurückgegebene Referenz), wertet sie den Teilausdruck Ausdr aus und gibt das Ergebnis zurück."
Sorry, ohne Master in Philosophie kann ich dies nicht verstehen!
Wie kriegt man die MsgBox dazu, eine 5 anzuzeigen?
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Frage zur Fat-Arrow-Funktion  Topic is solved

12 Apr 2023, 04:08

Moin,

das ist ein gutes Beispiel für die Sinnhaftigkeit mancher Beispiele, wobei ich denke, dass es schwierig ist, bei der Dokumentation einer Skriptsprache immer sinnvolle und kurze Beispiele zu finden.

In AHK v2 sind auch Funktionen Objekte, d.h. die Namen von Funktionen entsprechen globalen Variablen mit einer Objektreferenz. Die Zeile

Code: Select all

sumfn := Sum(a, b) => a + b
ist - wie auch in der Doku beschrieben - eine Kurzfassung von

Code: Select all

Sum(a, b) {
   Return a + b
}
sumfn := Sum
Der Variablen sumfn wird in beiden Fällen eine Referenz auf das Funktionsobjekt Sum zugewiesen. Das Funktionsobjekt Sum hat 2 Parameter (a, b). Der Rückgabewert dieses Funktionsobjekts wird im ersten Fall als Fat-Arrow-Funktion => definiert, im zweiten als vollständiger Funktionskörper. In beiden Fällen enthält sumfn eine Referenz auf eine Funktion mit zwei Pflichtparametern. Diese zwei Parameter müssen auch übergeben werden, wenn man sumfn im Skript aufruft:

Code: Select all

MsgBox(sumfn(a, b))
; entspricht
MsgBox(Sum(a, b))
Und das Beste zum Schluss: Du kannst der Variablen sumfn auch eine anonyme/namenlose Funktion zuweisen:

Code: Select all

sumfn := (a, b) => a + b
In diesem Fall gibt es keine Funktion Sum().
355 113
Posts: 8
Joined: 15 Jun 2019, 04:12

Re: Frage zur Fat-Arrow-Funktion

13 Apr 2023, 07:34

Vielen Dank!
Dank deiner Erklärung habe ich nicht nur die Fat-Arrow-Funktion verstanden, sondern auch, warum AHK v2 die Namen von Funktionen reservieren muß.
Zumindest die Ausgabe-Zeilen

Code: Select all

MsgBox(sumfn(a, b))
; entspricht
MsgBox(Sum(a, b))
sollten den zwei Handbuch-Beispielen hinzugefügt werden.
Ein Beispiel-Skript muss etwas bemerkbares machen! Dass, kein Error passiert, reicht nicht. Das schafft auch ein Blatt Papier.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 48 guests