从函数调用 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)

我希望这能回答你的问题。