我想创建一个存储并能够修改向量的类。看起来像这样:
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中的方法。而且我希望能够安全地深度复制我的变量。
我希望我能清楚地解释自己。 感谢您的时间。
答案 0 :(得分:2)
你想做
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/