【发布时间】:2015-08-24 20:55:54
【问题描述】:
当将此类的对象分配给变量时,是否可以使 Matlab 调用我的类 TMyClass 的 copy 方法(这是 handle calss)。换句话说,我希望我的handle 类在复制它时表现得像一个值类:
obj = TMyClass(); %// has method "copy", which returns a deep copy of the object
%// Now, if I write this ...
obj_copy = obj;
%// ... I want Matlab to do in fact this:
obj_copy = obj.copy; %//
据我了解,没有办法覆盖 Matlab 中的 = 运算符。是否有任何其他解决方法可以这样做?
谢谢!
【问题讨论】:
-
(因为我不确定这是否可行,)这种期望行为的预期用例或原因是什么?除了父母强制之外,可能还有其他解决问题的方法。
-
问题背景如下。我有一个描述一些数据的结构,许多函数处理这个结构。现在我想编写一个类(而不是结构)来存储和操作该数据,它应该是
dynamicprops类的后代。但我真的不想修改所有函数(兼容性问题),它们与结构一起工作并假设按值复制语义。 -
明白了。还有两个问题。 (1) 函数是否需要对其本地结构进行一些破坏性更改? (2)
handle类的需求来自TMyClass对dynamicprops的继承;有没有办法避免这种情况(如果您需要通过addprop向其他知道TMyClass的性质的类/函数中的实例添加属性,我只能看到需要该父级)? -
(1) 是的,像
MyStruct.field = some_value这样的函数中有很多操作,它假设MyStruct是作为参数传递的原始函数的副本。 (2) 实际上,由于需要动态添加/删除属性,因此需要从dynamicprops继承。问题是我希望所有功能也可以使用旧结构。到目前为止,我遇到的最简单的解决方案是为每个函数添加一个检查:如果参数是一个对象,则创建它的副本。但也许有更优雅的解决方案......
标签: matlab matlab-class