matlab:将句柄类复制为值类
Posted
技术标签:
【中文标题】matlab:将句柄类复制为值类【英文标题】:matlab: copy handle class as value class 【发布时间】: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
继承。问题是我希望所有功能也可以使用旧结构。到目前为止,我遇到的最简单的解决方案是为每个函数添加一个检查:如果参数是一个对象,则创建它的副本。但也许有更优雅的解决方案......
【参考方案1】:
如果你有一个值类,那么obj_copy = obj
会为你的对象创建一个新副本。对于句柄类,您始终必须自己调用复制函数。
我已经遇到了同样的问题,建议您按照您的建议执行copy
方法。
根据你的设计和你想用它做什么,你也可以疯狂地使用流畅的界面。在我的情况下,我有一个包含数据的对象,它以这种方式返回自身的过滤副本:
obj = DataObject()
f1 = obj.getByType('pressure') % f1 ~= obj
f2 = f1.getByTemperature(@(x) x < 10) % using an anonymous function for filtering, also f2 ~= f1
【讨论】:
以上是关于matlab:将句柄类复制为值类的主要内容,如果未能解决你的问题,请参考以下文章