[ << Schnittstellen für Programmierer ] | [Anfang][Inhalt][Index] | [ LilyPond Scheme-Schnittstellen >> ] |
[ < Benutzung von Scheme-Funktionen ] | [ Nach oben : Scheme-Funktionen ] | [ Musikalische Funktionen > ] |
2.2.3 Leere Scheme-Funktionen
Manchmal wird eine Prozedur ausgeführt, um eine Aktion zu machen und nicht,
um einen Wert auszugeben. Einige Programmiersprachen (wie C oder Scheme)
setzen Funktionen für beide Konzepte ein und verwerfen einfach den
Rückgabewert (normalerweise, indem einem Ausdruck erlaubt wird, als
Aussage zu funktionieren und das Ergebnis ignoriert wird). Das ist
klug, aber auch fehleranfällig: die meisten C-Kompilierer haben heutzutage
Warnungen für verschiedene nicht-„gültige“ Ausdrücke, die verworfen
werden. Viele Funktionen, die eine Aktion ausführen, werden von den
Scheme-Standards als Funktionen betrachtet, deren Wiedergabewert unspezifiert
ist. Der Scheme-Interpreter von LilyPond, Guile, hat den eindeutigen
Wert *unspecified*
, der normalerweise (etwa wenn man set!
direkt auf eine Variable anwendet), aber leider nicht konsistent in
diesen Fällen ausgegeben wird.
Indem man eine LilyPond-Funktion mit define-void-function
definiert,
geht man sicher, dass dieser Spezialwert (der einzige Wert, der das
Prädikat void?
erfüllt) wiedergegeben wird.
noPointAndClick = #(define-void-function () () (ly:set-option 'point-and-click #f)) ... \noPointAndClick % Point and Click deaktivieren
Wenn man einen Ausdruck nur wegen seiner Nebeneffekte evaluieren will
und keinen der möglicherweise ausgegebenen Werte interpretiert haben
will, kann man dem Ausdruck \void
voranstellen:
\void #(hashq-set! eine-Tabelle ein-Schlüssel ein-Wert)
Auf diese Weise kann man sicher sein, dass LilyPond dem ausgegebenen
Wert keine Bedeutung zuweist, unabhängig davon, wo er angetroffen wird.
Das funktioniert auch für musikalische Funktionen wie \displayMusic
.
[ << Schnittstellen für Programmierer ] | [Anfang][Inhalt][Index] | [ LilyPond Scheme-Schnittstellen >> ] |
[ < Benutzung von Scheme-Funktionen ] | [ Nach oben : Scheme-Funktionen ] | [ Musikalische Funktionen > ] |