从函数调用 class 对象而不将其插入 MATLAB 中的函数
Calling class object from a function without insert it to the function in MATLAB
我们在 'Reconstruction the subclass object from a saved struct' MATLAB OOP 文档中有此代码。
classdef MySuper
% Superclass definition
properties
X
Y
end
methods
function S = saveobj(obj)
% Save property values in struct
% Return struct for save function to write to MAT-file
S.PointX = obj.X;
S.PointY = obj.Y;
end
function obj = reload(obj,S)
% Method used to assign values from struct to properties
% Called by loadobj and subclass
obj.X = S.PointX;
obj.Y = S.PointY;
end
end
methods (Static)
function obj = loadobj(S)
% Constructs a MySuper object
% loadobj used when a superclass object is saved directly
% Calls reload to assign property values retrived from struct
% loadobj must be Static so it can be called without object
obj = MySuper;
obj = reload(obj,S);
end
end
end
我有一个关于 obj = MySuper
的问题。这条线的目的是什么?我们如何从这个函数调用 MySuper
对象而不向 loadobj
函数插入任何对象?
您的第一个问题是:obj = MySuper;
行的目的是什么?
答案是 obj = MySuper;
行启动变量 obj
作为 class MySuper
的元素。如果第一个输入参数是 class 的实例,class 中的非静态函数将仅 运行,因此如果 obj
未作为 MySuper
启动]-object,然后 matlab 将寻找其他函数调用 reload
到 运行,如果找到 none 会给你一个错误。
关于你的第二个问题,我不是100%确定你的意思。但我希望以下几点之一能回答您的问题:
如果你想制作一个与 class 相关的函数,而不是 class 的特定实例,你可以制作一个静态函数,这些函数可以接受任何输入(也(如果你想要那样的话)根本没有输入) - 也就是说他们不需要特定 class.
的第一个输入参数
要 运行 静态函数,请使用 class 名称后跟一个点,然后是函数名称,因此您可以在此处键入 MySuper.loadobj(S)
到 运行带有参数 S
的函数。
我建议您使用给定的示例进行尝试,以更好地了解 oop 在 matlab 中的工作方式,例如,您可以尝试:
S.PointX = 1;
S.PointY = 2;
obj = MySuper.loadobj(S)
我希望这能回答你的问题。
我们在 'Reconstruction the subclass object from a saved struct' MATLAB OOP 文档中有此代码。
classdef MySuper
% Superclass definition
properties
X
Y
end
methods
function S = saveobj(obj)
% Save property values in struct
% Return struct for save function to write to MAT-file
S.PointX = obj.X;
S.PointY = obj.Y;
end
function obj = reload(obj,S)
% Method used to assign values from struct to properties
% Called by loadobj and subclass
obj.X = S.PointX;
obj.Y = S.PointY;
end
end
methods (Static)
function obj = loadobj(S)
% Constructs a MySuper object
% loadobj used when a superclass object is saved directly
% Calls reload to assign property values retrived from struct
% loadobj must be Static so it can be called without object
obj = MySuper;
obj = reload(obj,S);
end
end
end
我有一个关于 obj = MySuper
的问题。这条线的目的是什么?我们如何从这个函数调用 MySuper
对象而不向 loadobj
函数插入任何对象?
您的第一个问题是:obj = MySuper;
行的目的是什么?
答案是 obj = MySuper;
行启动变量 obj
作为 class MySuper
的元素。如果第一个输入参数是 class 的实例,class 中的非静态函数将仅 运行,因此如果 obj
未作为 MySuper
启动]-object,然后 matlab 将寻找其他函数调用 reload
到 运行,如果找到 none 会给你一个错误。
关于你的第二个问题,我不是100%确定你的意思。但我希望以下几点之一能回答您的问题:
如果你想制作一个与 class 相关的函数,而不是 class 的特定实例,你可以制作一个静态函数,这些函数可以接受任何输入(也(如果你想要那样的话)根本没有输入) - 也就是说他们不需要特定 class.
的第一个输入参数要 运行 静态函数,请使用 class 名称后跟一个点,然后是函数名称,因此您可以在此处键入 MySuper.loadobj(S)
到 运行带有参数 S
的函数。
我建议您使用给定的示例进行尝试,以更好地了解 oop 在 matlab 中的工作方式,例如,您可以尝试:
S.PointX = 1;
S.PointY = 2;
obj = MySuper.loadobj(S)
我希望这能回答你的问题。