【发布时间】:2014-02-17 07:34:20
【问题描述】:
在 matlab 中,每个类方法看起来都像是一个普通方法,其第一个参数是对象本身。
这样的范例对于其他 oop 语言(例如 python)是完全可以接受的,因为类是通过引用传递的。另一方面,matlab 默认情况下按值传递对象(句柄类除外)。
从所有这些我推断,即使使用最简单的 setter 函数(或任何其他类方法)也会导致整个对象被复制。
例如,下面是matlab中某个类方法的签名:
classdef foo
methods
function obj = set.myParam(obj,value);
function myfun(obj, value);
end
end
在这种情况下,当我调用 fooObj.myfun(5) (或只是 myfun(fooObj,5))时,matlab 会复制整个 fooObj=foo() 吗?
这不是非常大的开销吗?在我看来,为每个类方法(和 setter)复制整个对象的效率非常低。
我错过了什么吗?有没有办法在 matlab 中避免这种情况,同时仍然使用 oop 技术?
我是否必须使用句柄类来防止这种性能开销?
【问题讨论】:
标签: matlab oop matlab-class