WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

dynamische Properties überprüfen und an Funktion übergebe

 

Anfänger 2.0
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 17.10.13
Wohnort: kreis Karlsruhe
Version: ---
     Beitrag Verfasst am: 10.08.2015, 10:55     Titel: dynamische Properties überprüfen und an Funktion übergebe
  Antworten mit Zitat      
Hi Leute, der Anfänger mal wieder hier Very Happy

Folgendes Problem:

gibt es die Möglichkeit in einer Klasse alle vorhandenen properties anzugeben?
Ich möchte diese in einer Schleife auf isempty() überprüfen. Das Problem hierbei ist, dass die Klasse dynamicprops hat. Sprich ich kann keine statische Abfrage machen.
Code:

% sei properties ein cellarray mit den property namen als string
for pointer = 1:1:length(properties)
    if ~isempty(obj.(properties{pointer}))
%
    end
end
 


desweiteren möchte ich anschließend eine Funktion aufrufen, wobei ich die nicht leeren properties übergeben muss.
Code:

tutetwas(propName1, obj.(propName1)); % für alle nichtleeren props
 

Gibt es eine Möglichkeit diesen Aufruf dynamisch zu gestalten?
Ohne ein cellarray zu übergeben, welches in der Funktion dann aufgebröselt werden muss?

So ist die aufzurufende Funktion aufgebaut
Code:

funktion tutetwas(varargin)
%% die parameter werden in folgender form als string übergeben
% paramName1, paramWert1, paramName2, paramWert2, ...
    if (~isempty(varargin)) && (rem(length(varargin),2) == 0)

    end

end
 


Hoffe da kann einer weiterhelfen Smile
Danke schonmal im Voraus Wink
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2015, 10:58     Titel:
  Antworten mit Zitat      
Hallo,

hast du es schon mit dem properties-Befehl versucht?
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger 2.0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 17.10.13
Wohnort: kreis Karlsruhe
Version: ---
     Beitrag Verfasst am: 10.08.2015, 11:10     Titel:
  Antworten mit Zitat      
Oh man ich dusel Laughing
Hab die Funktion total vergessen Embarassed ja das funktioniert danke:)

Und wie schaut es mit der zweiten Frage aus? Kann man Parameter dynamisch angeben?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2015, 11:14     Titel:
  Antworten mit Zitat      
Hallo,

sicher kann man. Man konstruiert ein Cell Array data und übergibt dann an die Funktion
Code:

Die Frage ist nur, was das bringt. Ob du nun das Cell Array varargin oder das übergebene Cell Array verarbeiten musst, ist doch gleichgültig?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger 2.0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 17.10.13
Wohnort: kreis Karlsruhe
Version: ---
     Beitrag Verfasst am: 10.08.2015, 11:25     Titel:
  Antworten mit Zitat      
Naja die Funktion wird auch von anderen Funktionen aus aufgerufen und dort habe ich das Problem nicht.. möchte ungern so viel am restlichen Code anpassen müssen

Und wenn ich eine cellarray data{:} übergebe, habe ich in der Zielelfunktion ja stehen varargin{1} == data{:} und nicht sowas wie varargin{1} == data{1}

oder vielleicht fange ich das ab:
Code:

%in der zielfunktion
if (length(varargin)==1) && (iscell(varargin{1}))
    varargin = varargin{1};
end
 


ist das so klug gelöst? oder gibt es da was "richtiges"?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2015, 11:31     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Und wenn ich eine cellarray data{:} übergebe, habe ich in der Zielelfunktion ja stehen varargin{1} == data{:} und nicht sowas wie varargin{1} == data{1}

Hast du's denn mal ausprobiert?

Code:


und Aufruf mit
Code:
data = {'bla', 1, 'blabla', 2};
testvararg(data{:})


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger 2.0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 17.10.13
Wohnort: kreis Karlsruhe
Version: ---
     Beitrag Verfasst am: 10.08.2015, 11:34     Titel:
  Antworten mit Zitat      
Ja, am Freitag erst.. aber es lief nicht.
Hmm wenn du meinst es sollte funktionieren, versuche ich es gleich wieder.
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger 2.0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 17.10.13
Wohnort: kreis Karlsruhe
Version: ---
     Beitrag Verfasst am: 10.08.2015, 11:38     Titel:
  Antworten mit Zitat      
Nein funktioniert nicht ich bekomme das cellarray zurück
Hab ich wohl doch nichts falsch gemacht letzte Woche.
Code:

data = {'asd', 'dsa'};
argtest(data)
 

Code:

function argtest(varargin)
    if (~isempty(varargin)) && (rem(length(varargin),2) == 0)
        disp(varargin{1}, varargin{2});
    else
        disp(varargin{1});
    end
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2015, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

und mit
Code:
argtest(data{:})

?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Anfänger 2.0
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 17.10.13
Wohnort: kreis Karlsruhe
Version: ---
     Beitrag Verfasst am: 10.08.2015, 11:53     Titel:
  Antworten mit Zitat      
Oh super das funktioniert ja.
War ja wieder klar, dass es so einfach geht! Rolling Eyes

danke dir Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.