MATLAB 如何从原始 class 中的 class 中的方法修改值 class 的 属性?
MATLAB How to modify property of a value class from a method within a class that is within the original class?
我想创建一个 class 来存储和修改向量。看起来像这样:
classdef vect3d
properties
vec
rotate
end
methods
function obj = vec3d(a,b,c)
vec = [a,b,c];
rotate = rot(obj) ;
end
end
end
我还有一个 class 叫做 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
如果我使用句柄 class 而不是值 class,我可以进行此操作;但是,如果我将另一个变量设置为等于 MyVec,它们就会链接(都指向同一个对象),这是我想要避免的。
我想将指向我的变量的指针传递给 rot class,以便我可以在 rot class 的函数中操作它 class。
简而言之:
我希望能够使用
MyVec.rotate.byDCM( MyDCM)
修改 MyVec,而不实际在内存中创建它的副本。我希望 byDCM 成为旋转中的一种方法,而不是 MyVec 的方法。我希望能够安全地深度复制我的变量。
我希望我解释清楚了。
感谢您的时间。
你想做
MyVec = rotate.byDCM(MyVec, MyDCM);
修改传递给函数的变量的唯一方法是如果它是一个句柄 class,但是你将无法使用 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/
我想创建一个 class 来存储和修改向量。看起来像这样:
classdef vect3d
properties
vec
rotate
end
methods
function obj = vec3d(a,b,c)
vec = [a,b,c];
rotate = rot(obj) ;
end
end
end
我还有一个 class 叫做 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
如果我使用句柄 class 而不是值 class,我可以进行此操作;但是,如果我将另一个变量设置为等于 MyVec,它们就会链接(都指向同一个对象),这是我想要避免的。
我想将指向我的变量的指针传递给 rot class,以便我可以在 rot class 的函数中操作它 class。
简而言之: 我希望能够使用
MyVec.rotate.byDCM( MyDCM)
修改 MyVec,而不实际在内存中创建它的副本。我希望 byDCM 成为旋转中的一种方法,而不是 MyVec 的方法。我希望能够安全地深度复制我的变量。
我希望我解释清楚了。 感谢您的时间。
你想做
MyVec = rotate.byDCM(MyVec, MyDCM);
修改传递给函数的变量的唯一方法是如果它是一个句柄 class,但是你将无法使用 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/