|
Bluesmaster |

Forum-Century
|
 |
Beiträge: 203
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: Gera
|
 |
|
 |
Version: 2012a
|
 |
|
|
 |
|
Verfasst am: 22.01.2013, 16:42
Titel: inputargument per NUMMER
|
 |
Gibt es so etwas? (Und wenns noch so aufwändig ist)
Hintergrund ist ein Snipped, dass ALLE Argumente sammeln soll
und an einen inputParser weiterreichen soll
tut es nicht, da es alphabetisch sortiert.
Auch die Aussage, dass es absolut unmöglich ist würde helfen.
Gruß
Blues
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 22.01.2013, 17:01
Titel:
|
 |
|
|
Bluesmaster |
Themenstarter

Forum-Century
|
 |
Beiträge: 203
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: Gera
|
 |
|
 |
Version: 2012a
|
 |
|
|
 |
|
Verfasst am: 22.01.2013, 17:07
Titel:
|
 |
leider nein. Soweit ich verstehe, sagt inputname unter welchem
variablennamen der AUFRUFER die Variable übergeben hat.
Ich muss aber IN der Funktion wissen wie sie heißt. Das klingt erstmal
komisch, weil ich es ja ablesen kann, aber wie gesagt, ich will ein Snipped
erstellen, dass ich nur einfüge und NICHT mehr anpassen muss
Gruß
Blues
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 22.01.2013, 19:56
Titel:
|
 |
Hallo
und warum nutzt nicht VARARGIN?
|
|
|
Bluesmaster |
Themenstarter

Forum-Century
|
 |
Beiträge: 203
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: Gera
|
 |
|
 |
Version: 2012a
|
 |
|
|
 |
|
Verfasst am: 23.01.2013, 11:50
Titel:
|
 |
Es geht um die Pflichtargumente ( also parser.addRequired( ) )
Die Pflichtargumente packe ich ungern in varargin da es dafür keine Vorschläge für den Aufrufer gibt und er erst recherchieren muss,
und ich separat prüfen müsste ob sie eingegeben wurden.
Aus dem was ich gestern noch recherchiert habe, wage ich jetzt mal die Behauptung, dass es unmöglich ist.
Trotzdem Danke für deine Mühe denny.
(wenn man von der Möglichkeit absieht, dass die Funktion ihr eigenes M-File ausliest und analysiert, was zu lange dauert und übertrieben wäre)
Gruß
Blues
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 23.01.2013, 12:18
Titel:
|
 |
|
 |
|
Bluesmaster hat Folgendes geschrieben: |
Es geht um die Pflichtargumente ( also parser.addRequired( ) )
Die Pflichtargumente packe ich ungern in varargin da es dafür keine Vorschläge für den Aufrufer gibt und er erst recherchieren muss,
und ich separat prüfen müsste ob sie eingegeben wurden.
|
Die Pflichtargumente musst du doch auch prüfen, ob diese eingegeben wurden oder nicht? Und dass diese nicht leer sind?
Mit NARGINCHK(bzw NARGCHK für ältere Matlab versionen), kannst du ja bestimmen wie viele Parameter Pflicht sind.
Du kannst in der Funktion doch eh nicht unterscheiden, ob A oder B jetzt fehlen.(Nur wenn Wertebereich sich unterscheidet, Char vs Double Überprüfung)
z.b beim Aufruf test( b ) oder test(a), was fehlt denn nun a oder b?
Und wenn so aufgerufen wird: test([],a)? Ist das korrekte Eingabe?
Zitat: |
(wenn man von der Möglichkeit absieht, dass die Funktion ihr eigenes M-File ausliest und analysiert, was zu lange dauert und übertrieben wäre) |
Das wäre so möglich, muss dann aber zuerst mit EXIST prüfen ob diese Variable überhaupt im Workspace ist.
Wie gesagt VARARGIN finde ich an der Stelle bessere alternative.
|
|
|
Bluesmaster |
Themenstarter

Forum-Century
|
 |
Beiträge: 203
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: Gera
|
 |
|
 |
Version: 2012a
|
 |
|
|
 |
|
Verfasst am: 23.01.2013, 13:28
Titel:
|
 |
Ich denke das ist sicherlich auch ein Stück weit Geschmackssache.
Aus der Perspektive des Aufrufers haben "Direktargumente" aber
die Vorteile:
- ich muss nur einen Wert übergeben statt einem ( 'varName' , Vaule )
- ich weiß genau wieviele Argumente Pflicht sind (Tabcomplete)
- ich weiß sofort welche Argumente Pflicht sind
- ich kann mich nicht so leicht verschreiben
Deswegen benutze ich sie gern. Aber hier wollte ich einfach "Peace of Mind"
wie man so schön sagt, dass das Snipped "für immer" funktioniert, selbst
wenn ich in ein paar Jahren vergessen habe unter welchen Bedingungen.
Und dazu wäre es eben nötig gewesen, Direktargumente & Varargins
in der richtigen Reihenfolge ( sprich wie im Funktionskopf ) zu vereinen.
Ich prüfe jetzt einfach die Direktargumente manuell und die
varargins mit dem Parser, das nimmt sich nicht viel.
Gruß
Blues
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.01.2013, 19:17
Titel:
|
 |
|
 |
|
Hallo Bluesmaster,
Ich verstehe den Zweck immer noch nicht. Deshalb habe ich nicht den eindruck, dass die gewünschte Funktionalität etwas ist, das "funktioniert, auch wenn man in ein paar Jahren vergessen hat unter welchen Bedingungen". Das sieht eher nach Meta-Programmierung aus, was die Komplixität eines Programms deutlich erhöht und damit das Debuggen eher schwieriger macht als leichter.
Integritätstests sollten wirklich so einfach und schlicht wie möglich sein. Schon NARGINCHK hat eine gewisse Tücke, da es früher ja anders hieß und damit ein Error erzeugt wird, wenn man die falsche Matlab Version benutzt.
Die bisherige Aufteilung in explizit programmierte Pflich-Inputs und VARARGIN für die optionalen Argumente ist übersichtlich und effizient.
Zu versuchen das zweite Input Argument zu erhalten, erzeugt dagegen eine "magische" Verknüpfung: Hier wird die Reihenfolge der Argumente sinntragend, obwohl die Benutzung der Variablennamen "a" und "b" doch gerade impliziert, das man die Reihenfolge der Inputs auch ändern kann, solange man dies auch in allen Callern anpasst.
Ein Zwischenweg wäre:
Aber das gefällt mir weniger gut als "Fcn(a,b,varargin)".
Gruß, Jan
|
|
|
Bluesmaster |
Themenstarter

Forum-Century
|
 |
Beiträge: 203
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: Gera
|
 |
|
 |
Version: 2012a
|
 |
|
|
 |
|
Verfasst am: 23.01.2013, 19:46
Titel:
|
 |
Hallo Jan,
Es stimmt was du sagst, aber leider hat der Entwickler des
beschlossen,
dass die Reihenfolge doch zählt. Man gibt zwar den Variablennamen
an, aber das ignoriert der Parser einfach ( große Missverständnisgefahr wie ich finde)
Das lässt er einfach durchgehen und prüft jetzt a auf numeric statt auf isvector. Deswegen ist die Reihenfolge wichtig.
Mir ist auch eine Lösung eingefallen, die ist aber sowas von Metaprogrammierung dass ich sie lieber sein lasse.
( >> die Funktion ruft sich einfach selbst auf und zwar so:
functionItself( 1 , 2 , 3 , ... usw)
und prüft anschließend mit who welche Variable wie heißt und welche Zahl sie gerade trägt. Falls es jemanden interessiert, was ich nicht glaube)
Gruß
Blues
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 25.01.2013, 12:02
Titel:
|
 |
Hallo Bluesmaster,
Das muss inputParser gar nicht können, weil man ja VARARGIN verwenden kann, also wie soll dann der Parser das dann matchen.
Ich glaube es geht dir darum, um Refactoring später einfacher zu betreiben?
Sonst sehe ich keinen Sinn für deine Frage, da man ja als Entwickler die Schnittstellen festlegt. Also weiß der Entwickler ziemlich genau in welcher Reihenfolge Argumente übergeben werden.
Und die Interne Variablennamen, was interessieren sie andere Nutzer. Nutzer kriegt meist kompilierte Version, da kann er nicht mal reinkucken.
Was ein externer Nutzer braucht, dass die Namen der Argumente in inputParser der Hilfe entsprechen müssen. Das ist alles.
|
|
|
Bluesmaster |
Themenstarter

Forum-Century
|
 |
Beiträge: 203
|
 |
|
 |
Anmeldedatum: 13.11.11
|
 |
|
 |
Wohnort: Gera
|
 |
|
 |
Version: 2012a
|
 |
|
|
 |
|
Verfasst am: 25.01.2013, 12:29
Titel:
|
 |
Kurzes Fazit:
- Inputparser braucht die richtige Reihenfolge für Direktargument
- der name in addRequiredArg( name , @testfcn ) dient nur der Orientierung
- Ich finde Direktargumente praktischer als varargins
- Ja, die Grundidee war einfaches Refactoring/ Snippetanpassung
- Nein, es ist nicht ohne weiteres möglich die Reihenfolge der Argumente zu ermitteln
Gruß
Blues
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|