在 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)复制整个对象似乎非常低效。
我错过了什么吗?在仍然使用 oop 技术的同时,有没有办法在 matlab 中避免这种情况?
我是否必须使用句柄类来防止这种性能开销?