| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Variable?? (1427 mal gelesen)
|
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 25. Mrz. 2004 15:16 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wieder mal ein Anfängerproblem. Wie und wann ist eine Variable lokal oder global. (defun c:hauptprog( / Var1) ; (globale Var / lokale Var)? .. (unterprog) .. )
(defun unterprog( / a) ... ) ****** (defun c:hauptprog(b / Var1) .. .. ) wenn ich b so definiere kommt die Fehlermeldung "zuwenig Agumente" Gruß Moony
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 25. Mrz. 2004 15:30 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hallo Moony, alle Variablen, die nicht in der Klammer nach dem (defun Name (..) stehen, sind Global. die Aufteilung in der Klammer selbst ist wie folgt: (defun Name (parameterA parameterB / variable1 variable2) ...) Eine Funktion, die so definiert ist, erwartet 2 Parameter, wenn diese aufgerufen wird. (defun vari_alert (Text /) (alert Text) ) (vari_alert "hallo") oder (setq vari1 "Du da") (vari_alert vari1) Nachlesen kannst du das auch in der Serie 'Einführung in Autolisp', zu finden auf meiner Seite unter Training->AutoLISP Training. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 25. Mrz. 2004 19:26 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
|
Moony Mitglied Werkzeugmacher
Beiträge: 49 Registriert: 29.02.2004
|
erstellt am: 26. Mrz. 2004 06:54 <-- editieren / zitieren --> Unities abgeben:
|
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003 If you want to help and want to respect other people's questions, then, please: Please, ALWAYS assume that I already tried to search for an answer to my question. Thx. Also, please, DON'T ask me what the "actual" goal of my question is. Please, firstly just answer it directly as stated - if you know an answer and want to give it. Only secondly, add other commments. Many, many, many thanks in advance!
|
erstellt am: 08. Jul. 2004 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hi an alle Checker, ich hätte da auch eine Frage zu den globalen Variablen, die mir so durch den Kopf geht... Kann ich globale Variablen auch wieder bewusst löschen, nachdem ich sie in einer anderen Funktion definierte? (ich meine nicht auf nil setzten, sondern tatsächlich löschen) Das mit den globalen Variablen ist in der online-Hilfe ja entsetzlich schlecht beschrieben. Oder ich habe das richtige Kapitel noch nicht gefunden - ist ja auch nicht gerade sehr userfreundlich die Hilfe (Es scheint zwar viel Information in die Hilfe hineingepackt zu sein, aber deutsch/englisch gemischt und wie mir vorkommt diverse Themen doppelt vorhanden oder verwirrend strukturiert!) ciao, freue mich schon auf meinen Italien-Urlaub, Stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 08. Jul. 2004 21:06 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
...und wenn eine globale Variable automatisch auch ohne setq erzeugt wird, wie ist es dann am besten zu handhaben? Soll man trotzdem beim erzeugen immer setq verwenden, oder nicht? Ich nehme mal an, das beste ist zumindest Konsistenz, also nicht einmal ohne und ein andermal mit setq. Danke für's Kopf zermartern. Grüße und schönes Wochenende, Stephan acart Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 08. Jul. 2004 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Hi Autocart, ein paar Sachen sind dir noch nicht klar - aber mach dir nix draus, das ist den wenigsten hier klar: Es gibt keine Variablen in diesem Sinne - in Lisp gibt es nur Symbole. Diesen Symbolen kann man entweder einen Wert zuweisen oder auch nicht, dann ist das Symbol eben an nil gebunden. Tipp doch einfach mal auf der Acad-Befehlszeile das hier ein: !blödes-symbol-das-es-bestimmt-nicht-gibt Und was meldet dir Lisp? => nil, aber niemals etwas wie "undeklarierte Variable". So etwas gibt es in anderen Sprachen, aber nie in Lisp. Es gibt also auch dieses Symbol, und es ist an nil gebunden. Löschen kann man Symbole nicht - wozu auch? Man kann in Lisp wirklich ganze Programme schreiben, die nur aus Symbolen bestehen, und alle diese Symbole sind und bleiben an nil gebunden, oder aber an andere Symbole, die an nil gebunden sind. Wenn man aber Wertbindungen will, kommt man an set nicht vorbei - und setq ist nur eine nette Schreibweise für set, damit man sich das Eintippen eines Hochkommas sparen kann (wofür man allerding ein 'q' mehr tippen muss). Ach ja, und (defun ...) samt Erscheinungsformen erzeugt auch eine längerfristige Bindung, foreach und lambda eine eher vorübergehende. Zitat: und wenn eine globale Variable automatisch auch ohne setq erzeugt wird...
Ich dehne einfach mal setq auf set aus: Dieser Satz ist so nicht haltbar. Natürlich, fast jedes (defun...) erzeugt eine globale Variable, aber darum geht es dir doch nicht, oder? Was du meinst, ist wohl eher das, was viele unter "Sicherheitsaspekte" an AutoLisp kritisieren: Man ruft eine (unbekannte, ungeprüfte) Subfunktion auf, und diese kann a) globale Variablen erzeugen, die man gar nicht wollte, und b) einem sogar noch die lokalen Variablen in der aufrufenden Funktion versauen. Aber diese 'bösen' Funktionen benutzen setq! Lisp - vor allem das sehr vereinfachte AutoLisp - entspricht in keinster Weise den heutigen Sicherheitsanforderungen für eine Programmiersprache. Diese Sprache hat fast 50 Jahre auf dem Buckel, damals ging es darum, auf einem Rechner mit 8 KB Speicher Programme laufen zu lassen, die mit ein paar Zeilen Code Berge versetzt haben. Aber der, der das Programm gestartet hat, musste den ganzen Code kennen und beherrschen. Fazit: Es gibt wohl nach wie vor keine Sprache, mit der man mit so wenig Aufwand so viel erreichen kann - aber es gibt auch kaum eine, wo man so viel Murks machen kann. Und es gibt keinen Compiler, der irgendwas anmeckert;-) Gruß, Axel
------------------ Meine AutoLisp-Seiten Meine private Homepage 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 |
autocart Mitglied Technischer Redakteur
Beiträge: 698 Registriert: 08.09.2003
|
erstellt am: 09. Jul. 2004 10:19 <-- editieren / zitieren --> Unities abgeben: Nur für Moony
Danke mapcar. Ich habe erst angefangen, mich mit AutoLisp zu beschäftigen. Glaube, dass ich noch mehr eintauchen muss um das meiste zu verstehen. Sonst poste ich eh' wieder. thankful greetings, Stephan acart Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|