定义简单的MATLAB类

时间:2016-05-03 11:21:56

标签: matlab

我是Microsoft开发人员,但正在尝试帮助某些人使用MATLAB代码和设计。我很难理解类定义的语法和用法。

到目前为止

代码:

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

现在,我希望我的用法类似于以下内容:

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

最后一行返回1

第一行使用会导致错误:

  

输入太多

我在MATLAB上找到的样本似乎给你classdef但不是用法。

我希望有人可以帮助纠正这个简单的例子,以便我可以继续构建它。 (如上所述,我是一位经验丰富的开发者,只是不是用这种语言!)。

更新1:

使用MATLAB 2013b。

下面的确切用法和结果错误:

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

1 个答案:

答案 0 :(得分:2)

OP的解决方案最终在MATLAB中运行clear命令。很有可能,发生的事情是旧的类定义已经存储在内存中,并且由于某种原因没有自动更新。无论如何 - 一个简单的解决方案!

以防万一其他人在这个问题上遇到了什么,对类构造者最简单的基础知识的解释......

在MATLAB中,您可以使用没有构造函数的类的实例,您可以按照here所示的方法进行总结,如下所示:

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

OP想要创建一个构造函数,以便他可以在初始化时为类对象的属性赋值。为了清楚起见,构造函数是:

  

与班级同名的方法。

以下(已修改以适合OP&#39的用例)代码基本上是从here复制的。这里唯一的区别是我们首先检查是否在尝试将(可能未定义的)值分配给实例化类对象的属性之前提供了输入值:

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

现在(和以前一样),gt = Person('Graeme')将按预期工作。这显然假设该类保存在一个正确命名的M文件中,并且您已运行clear以摆脱以前的变量赋值错误。