MATLAB 如何从原始类中的类中的方法修改值类的属性



我想创建一个存储并能够修改向量的类。看起来像这样:

classdef vect3d
      properties
            vec
            rotate
      end
      methods
            function obj = vec3d(a,b,c)
                  vec = [a,b,c];
                  rotate = rot(obj) ;
            end
      end
end

我还有另一个类叫做rot;它具有旋转向量的函数。我想做的是:

MyVec = vec3d([1;2;3]);
MyVec2 = MyVec;
% Define a Directional cosine matrix to rotate the vector
MyDCM = ... ;
MyVec.rotate.byDCM(MyDCM) ;
% MyVec should now contain the rotated vector
% MyVec2 should remain as the original vector

如果我使用句柄类而不是值类,我可以进行此操作;但是,如果我将另一个变量设置为等于MyVec,它们就会链接(两者都指向同一对象),这就是我想要避免的。

我想将指向我的变量的指针传递给 rot 类,以便我可以在 rot 类的函数中操作它。

总之:我希望能够使用

MyVec.rotate.byDCM( MyDCM)

修改 MyVec,而无需在内存中实际创建它的副本。我希望byDCM是旋转中的一种方法,而不是MyVec的方法。我希望能够安全地深度复制我的变量。

我希望我清楚地解释了自己。谢谢你的时间。

你想做

MyVec = rotate.byDCM(MyVec, MyDCM);

修改传递给函数的变量的唯一方法是,如果它是一个句柄类,但是您将无法使用MyVec2 = MyVec进行深层复制。

如果按如下方式实现rotate.byDCM函数:

function vec = byDCM(vec, DCM)
   % modify vec here

然后 MATLAB 将优化内容,以便永远不会复制vec。请注意,在函数定义中,输入和输出列表中会出现相同的变量名称。调用函数时,作为该参数传递的相同变量(MyVec)也接收输出。MATLAB 解释器理解这一点,并允许函数就地修改变量。

参考: https://blogs.mathworks.com/loren/2007/03/22/in-place-operations-on-data/

最新更新