2016-05-03 23 views
3

Ich bin ein Microsoft-Entwickler, versuche jedoch, jemandem mit Matlab-Code und -Design zu helfen. Ich habe Mühe, die Syntax und Verwendung einer Klassendefinition zu verstehen.Einfache MATLAB-Klasse definieren

-Code bisher:

classdef Person 

    properties 
     Name 
    end 

    methods 

     function obj = Person(aName) 
      obj.Name = aName; 
     end 

     function ret = IsGraeme(obj) 
      if STRCMP(obj.Name , 'Graeme') 
       ret= 1; 
      else 
       ret= 0; 
      end 
     end 
    end 
end 

Nun, ich erwarte, dass meine Nutzung unten ähnlich zu sein:

graeme = Person('Graeme'); 
graeme.IsGraeme(); 

mit der letzten Zeile 1 zurück.

Die erste Zeile der Nutzung führt zu einem Fehler:

Too many inputs

Die Proben I auf MATLAB gefunden haben, scheinen Sie die classdef aber nicht die Verwendung zu geben.

Ich hoffe, jemand kann helfen, dieses einfache Beispiel zu korrigieren, so dass ich weiter darauf aufbauen kann. (Wie gesagt, ich bin ein erfahrener Entwickler, nur nicht in dieser Sprache!).

UPDATE 1:

Mit 2013B MATLAB.

Genaue Verwendung und daraus resultierende Fehler unter:

>> gt = Person('Graeme') 
Error using Person 
Too many input arguments. 
+0

Wenn ich Ihren Code kopieren und einfügen und 'STRCMP' in' strcmp' ändern (MATLAB ist [meistens] Groß- und Kleinschreibung!), Funktioniert das wie beschrieben. Verwenden Sie genau das gleiche Code-Snippet? Mit welcher MATLAB-Version und welchem ​​Betriebssystem arbeiten Sie? – hbaderts

+0

Verwenden von 2013b auf Windows 7. Wird versuchen, Fall zu ändern, wenn zurück am Schreibtisch. Danke für die schnelle Antwort. – GinjaNinja

+0

Bestätigt, dass das Ändern von STRCMP in strcmp dies nicht funktioniert. – GinjaNinja

Antwort

2

Die Lösung der OP endete als Ausführung des clear Befehl in MATLAB. Aller Wahrscheinlichkeit nach wurde eine alte Klassendefinition bereits im Speicher gespeichert und aus irgendeinem Grund nicht automatisch aktualisiert. Wie auch immer - eine einfache Lösung!

Nur für den Fall andere, die auf diese Frage stolpern, was eine Erklärung für die einfachsten Grundlagen der Klassenkonstruktoren ...

In MATLAB können Sie eine Instanz einer Klasse ohne Konstruktor-Funktion, können Sie den Ansatz folgen gezeigt here, resümierte unter:

>> gt = Person(); 
>> gt.Name = 'Graeme'; 
>> gt.IsGraeme(); 

Der OP einen Konstruktor schaffen wollte, so dass er Werte der Klasse Eigenschaften des Objekts bei der Initialisierung zugewiesen werden könnte. Nur aus Gründen der Klarheit ein Konstruktor ist:

a method having the same name as the class.

unterhalb der (modifizierten OP des Use-Case passen) -Code im wesentlichen aus here kopiert wird. Der einzige Unterschied ist, dass wir zunächst prüfen, ob ein Eingangswert hat, bevor Sie zur Verfügung gestellt worden, einen (möglicherweise nicht definiert) Wert auf eine Eigenschaft des instantiierten Klassenobjekts zuzuordnen:

function gt = Person(aName) 
    if nargin > 0 % Check if more than 0 arguments are provided 
     gt.Name = aName; % Assign input argument to property 
    end 
end 

nun (wie bisher), gt = Person('Graeme') funktioniert wie erwartet. Dies setzt natürlich voraus, dass die Klasse in einer korrekt benannten M-Datei gespeichert wird und dass Sie clear ausgeführt haben, um frühere Variablenzuweisungsfehler zu entfernen.