基本的matlab类方法[重复]
Posted
技术标签:
【中文标题】基本的matlab类方法[重复]【英文标题】:Basic matlab class method [duplicate] 【发布时间】:2012-08-23 11:48:52 【问题描述】:可能重复:How to modify properties of a Matlab Object
我正在尝试将我的 C# 代码转换为 Matlab,在 Matlab 中我决定使用 OOP,我没有在 Matlab 中使用过,以便能够处理我的 C# 代码的复杂性。
查看tutorial,我想出了以下代码:
classdef Cat
properties
meowCount = 0;
end
methods
function Meow(C)
disp('meowww');
C.meowCount = C.meowCount + 1;
end
end
end
结果:
>> c = Cat();
>> c.Meow();
meowww
>> c
c =
Cat
Properties:
meowCount: 0
Methods
所以,meowCount
不会改变。有什么问题?
【问题讨论】:
如果您希望能够像在示例代码中尝试那样更新Cat.meowCount
,则必须从handle
继承。
@Chris,是的。你的两个cmet都是真的。这是同一个问题的重复,对不起。它在使用handle
后工作。谢谢。
【参考方案1】:
我注意到的几个问题:
你没有构造函数 您不是从handle
基类派生的
构造函数不是绝对必要的,但对于真正想要开始开发更大的类时了解它非常有用。它用于初始化obj
对象,该对象被传递给每个方法。它与 Python 的 self
或 C++ 的 this
非常相似。
所以,你更正的班级:
classdef Cat < handle
properties
meowCount = 0;
end
methods
function obj = Cat()
% all initializations, calls to base class, etc. here,
end
function Meow(obj)
disp('meowww');
obj.meowCount = obj.meowCount + 1;
end
end
end
演示:
>> C = Cat;
>> C.Meow;
meowww
>> C.meowCount
1
【讨论】:
不需要构造函数,OP可以使用C
或obj
,这只是一个命名约定。正如我在对 OP 的评论中提到的那样,缺乏继承是问题的原因。因为这是一个重复的问题,我们应该投票结束而不是回答。
@Chris,我删除我的问题而不是投票给答案是不是更好?谢谢。
@Chris 什么时候命名约定变成了“just”命名约定?如果每个人都使用相同的名称来表示相同的事物(因此称为“约定”),那将是非常富有成效的。此外,构造函数虽然不是必要的,但在以后肯定会有用。但你当然是对的——这是一个骗局,应该被删除。
将来如果您发现您发布了重复的内容,最好这样做。但是,您现在将无法让您的问题得到一个赞成的答案(我认为)。如果您稍等片刻,这个问题可能会获得足够的票数,因此您无需做任何事情。阅读this meta post 以讨论删除重复项。
@RodyOldenhuis 对不起,如果我有点简洁。当然,最好每个人都遵循相同的约定。我只是觉得,由于 OP 问题的解决方案是继承自 handle
,因此这应该是您回答的重点。其他点应作为惯例提及并推荐。但是,目前您的回答似乎表明这些将通过某种方式解决 OP 遇到的问题,而他们没有。以上是关于基本的matlab类方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章