我是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.
答案 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
以摆脱以前的变量赋值错误。