ich möchte mal aufräumen mit dem weitverbreiteten Irrtum, dass (load ...) irgendwelche Programme lädt. Das kann so sein, muss aber nicht.
Die Funktion (load...) macht lediglich eines: Sie evaluiert einen bzw. mehrere Ausdrücke, die in einer Datei stehen! Macht mal einen kleinen Test - schreibt mal diese Zeichenkette in eine Datei:
"qig wdkls jhfö özfufzh fw zfwz"
Mit den Anführungszeichen! - dann als "test.lsp" abspeichern.
Dann gebt ihr (setq var(load"test")) auf der Kommandozeile ein und seht, dass jetzt var den Inhalt "qig wdkls jhfö özfufzh fw zfwz" hat. Das hat doch absolut nichts mit Funktionen zu tun, oder?
Aussagen wie "Alle anderen Varianten laden die Funktion immer am Anfang einer Session, obwohl Du sie mitunter gar nicht benutzen wirst" sind per se erstmal falsch - wer will denn schon wissen, was in den mit (load) geladenenen Ausdrücken drinsteht?
Schon wenn man diesen Code hier abändert:
(defun c:myprog ()
(load "myprog")
(c:myprog)
)
etwas abändert:
(defun c:myprog ()
(if null *myProgLoaded*(load "myprog"))
(c:myprog)
)
sieht die Sache völlig anders aus. Die globale Variable *myProgLoaded* zeigt dabei an, ob nur der Stub oder oder das Programm geladen wurde. Im alten AutoLisp war das alles noch einfacher, da hätte man z.B. über (length c:myprog) feststellen können, ob's der Stub oder das Programm ist.
Die Alternative ist nicht "Autoload" vs. "Was anderes". Der gesamte Autoload-Mechanismus ist nur eine Möglichkeit von vielen, wie man so einen Mechanismus implementieren kann. Aber jeder kann sich was besseres schreiben.
Gruß, Axel Strube-Zettler
------------------
(defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat
Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP