| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Sofortiger Abbruch einer Funktion (1688 mal gelesen)
|
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003 Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung. Programmierung, Wartung und Administration von MSSQL2000-Datenbanken. Grundlegende Kenntnisse in AutoLisp-Programmierung.
|
erstellt am: 23. Jan. 2004 15:27 <-- editieren / zitieren --> Unities abgeben:
Hallo Lispler, es kommt immer wieder mal, vor, dass ich eine Funktion an einer bestimmten Stelle sofort beenden will. Beispiel: ... (IF (NOT value) ;; Nur ausführen, wenn Variable "value" belegt wurde! (QUIT) (PROGN .... .... .... ) ) Mit dem (QUIT) wird meine Funktion zwar sofort abgebrochen, ich erhalte aber immer folgende Ausgabe: "Fehler: Beenden/Verlassen abbrechen". Da schreit der Anwender natürlich sofort wieder, weil da das Wort "Fehler" vorkommt. Wie kann ich also die Funktion ein einer bestimmten Stelle sofort abbrechen, ohne dass eine derartige Meldung erscheint? Danke und ciao, WolfgangE ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!!
[Diese Nachricht wurde von WolfgangE am 23. Jan. 2004 editiert.] 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: 23. Jan. 2004 15:52 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangE
Hallo Wolfgang, das ist eine Frage der Programmstruktur ich würde es so machen:
Code:
(defun XXX (/ a b c) (setq a ..) (setq b ..) (setq c ..) (if c (yyy c) ) ) (defun YYY (var / x y c) ... )
Somit ist der Programmablauf nicht abzubrechen, sondern läuft ohnehin nur in den Arbeitsbereich, wenn alle Bedingungen erfüllt sind. 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 |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 24. Jan. 2004 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangE
Die von Holger vorgeschlagene Strategie ist auf alle Fälle die saubere und elegantere Lösung - nicht nur für Lisp. Egal, ob die Funktion nun quit, exit , goto (in anderen Programmiersprachen) heißen, es besteht immer die Gefahr, das programminterne Umstellungen von z.B. globalen (System-) Variablen oder "offene" Dateien nicht ordnungsgemäß zurückgesetzt werden. Ich weiß - dazu gibt es zur Not immer noch einen entsprechenden Errorhandler. Doch dieser sollte eigentlich nur zum Einsatz kommen, wenn Nutzerspezifische Fehler abgefangen werden müssen und dieses Abfangen anders mit zu hohem progammiertechnischen Aufwand verbunden ist. Ich persönlich (* ist meine Meinung *) beginne jede Funktion mit Parameterübergabe mit einer Überprüfung dieser Parameter auf Sinnhaftigkeit. Dadurch erschließt sich dem Quellcodeleser auch gleich Typ und Inhalt der eigesetzten Variablen . Und Rechenzeit für so eine Überprüfung ist bei den heutigen Prozessoren nicht wirklich relevant. Als Bsp. kannst du dir ja mal den Anhang unter http://ww3.cad.de/foren/ubb/Forum145/HTML/000382.shtml ansehen Gruß Thomas
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003 Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung. Programmierung, Wartung und Administration von MSSQL2000-Datenbanken. Grundlegende Kenntnisse in AutoLisp-Programmierung.
|
erstellt am: 26. Jan. 2004 08:09 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, hallo Thomas genau den von Holger erwähnten Aufbau wollte ich vermeiden, weil ich es einfach übersichtlicher finde, sofort abzubrechen als ein weiters IF einzubauen. Da Holter aber offensichtlich recht viel Erfahrung hat (ich "beobachte" das Forum doch recht häufig) und aufgrund der Argumentation von Thomas ist es wohl besser, wenn ich's so beibehalte. Danke euch beiden und ciao, WolfgangE ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2494 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 26. Jan. 2004 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangE
Hi Wolfgang, ich glaube Du hast da was mißverstanden. "...sofort abzubrechen als ein weiters IF einzubauen..." Es geht gar nicht um ein WEITERES If. Es geht darum, dass Pgm einfach nur dann arbeiten zu lassen, wenn Deine Bedingungen (die Du ja eh abfragst) erfüllt sind. Also nicht wie bei Dir:
Code:
(IF (NOT value) (QUIT) (PROGN ... ) )
sondern: Code:
(IF value (PROGN ... ) )
Ich persönlich gebe aber meinen Usern gerne Rückmeldungen. Bei mir sieht das dann so aus:
Code:
(IF (not value) (alert "Ey Idiot, Du hast [xyz] vergessen. Funktion beendet !) (PROGN [machwas] ... ) )
------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
WolfgangE Mitglied
Beiträge: 1006 Registriert: 29.01.2003 Compass2000 in (fast) allen Ausbaustufen: Jobserver, ACM, Replikator, DBQ-Programmierung. Programmierung, Wartung und Administration von MSSQL2000-Datenbanken. Grundlegende Kenntnisse in AutoLisp-Programmierung.
|
erstellt am: 26. Jan. 2004 11:22 <-- editieren / zitieren --> Unities abgeben:
Stimmt, das mit dem ZUSÄTZLICHEM if war ein Denkfehler. Das mit der Benuzterausgabe hat auch noch was für sich ... ------------------ An Optimist Is A Person Who Has Not Been Shown All The Facts Yet!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.
Beiträge: 3849 Registriert: 15.10.2003
|
erstellt am: 28. Jan. 2004 22:17 <-- editieren / zitieren --> Unities abgeben: Nur für WolfgangE
Zitat: Original erstellt von WolfgangE: Das mit der Benutzerausgabe hat auch noch was für sich ...
Ich schreibe auch immer viele Rückmeldungen in meine Programme - in vollem Bewusstsein, daß sie fast nicht gelesen werden. Aber das ist dann die Grundlage zu Schritt 2: Schritt 1 (Marc): (alert "Ey Idiot, Du hast [xyz] vergessen. Funktion beendet !") Schritt 2 (Peter2): "Ey Idiot, lies doch was da steht und mache es dann richtig .. ;-) Peter2 [Diese Nachricht wurde von Peter2 am 28. Jan. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |