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

Function handle als Objektproperty übergeben

 

MarekJosef
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 10.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2013, 13:56     Titel: Function handle als Objektproperty übergeben
  Antworten mit Zitat      
Hallo.

Ich würde gerne meiner Klasse ein function handle übergeben. So stelle ich mir das vor (bis auf die Tatsache, dass es nicht ganz funktioniert):
Code:

%"A.m"
classdef A
 properties
   EigenschaftA
 end

 methods
  function obj = SetEigenschaftA(obj, Variable)
   obj.EigenschaftA = Variable;
  end
 end

%"Skript.m"
ObjektA = A;
A.SetEigenschaftA = @(x)cos(x);
 


Es kommt zwar kein Fehler, aber er speichert mir in Eigenschaft dann einfach den Wert 0.5403 ab, also cos(1).
Ich habe aber später Daten und möchte von denen den Cosinus berechnen.

Geht das, dass ich irgendwie die Function Handle übergeben kann?
Private Nachricht senden Benutzer-Profile anzeigen


Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 16.01.2013, 14:46     Titel:
  Antworten mit Zitat      
Hallo,

gleich ein paar Anmerkungen:

1.
deine A-Klasse erbt nicht von "handle" wird also immer
eine Kopie von sich herausgeben und keine Referenz.
Dh. A.SetEigenschaftA = 5 gefolgt von A.EigenschaftA
führt zu ans = [] (du hast nur an einer alten Kopie herumgedoktort)

2.
<@(x) command >führt zu einer Anonymus-Fcn, die kein eigene eigene Code-Stelle
braucht sondern sofort einen Befehl ausführt und ihm
die Argumente "durchreichen" kann
Ein Functionhandle bekommst du mit: myFcnH = @cos

3. Es fehlt noch ein "end" um die Klasse zu schließen

4. so gehts:

Code:
classdef A  < handle
       
 properties(Access = public)
     
   EigenschaftA
   
 end
 
 methods
     
     
  function obj = SetEigenschaftA(  obj , Variable)
     
   obj.EigenschaftA = Variable;
   
  end
   
 end
 end


o = A
o.SetEigenschaftA( @cos )
o.EigenschaftA(2)
ans = -0.4161
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 16.01.2013, 14:49     Titel:
  Antworten mit Zitat      
Hallo

und was soll das Gleichzeichen in deinem Script?

sollte denn das nicht so heißen?
Code:
A.SetEigenschaftA(@(x)cos(x));


Außerdem darf Setter-Methode keinen Rückgabenwert haben, das habe aber schon in anderem Thread darauf hingewiesen

also muss die Klasse so heißen:
Code:
classdef A < handle
 properties
   EigenschaftA
 end

 methods
  function SetEigenschaftA(obj, Variable)
   obj.EigenschaftA = Variable;
  end
 end
end
Private Nachricht senden Benutzer-Profile anzeigen
 
MarekJosef
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 10.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2013, 15:38     Titel:
  Antworten mit Zitat      
Entschuldigung für die kleinen Fehler.
Ich habe bei mir jetzt den Fehler ausgemacht. Bei der Eingabe wollte ich eventuell auch einen Vektor zulassen mit mehreren Einträgen. Daher bin ich eine Schleife abgelaufen, und bin über die Eingabevariable "var" gegangen. Das heißt, ich habe für cos immer die "1" eingegeben. Ich könnte das ja aber mit einem Zellarray lösen, oder varargin. Ich möchte eventuell mehrere Funktionen eingeben können.

Vielen Dank aber. Ihr habt mich auf die Spur gebracht.
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.