在其他方法中访问从 class 的方法返回的数据

access data returned from a method of a class in other methods

我有以下class

classdef setting
        
    properties(Constant)
        n = setting.get_n;
        q = setting.get_q;
    end
    
    methods(Static)
        function data = load_setting
            File = 'Configuration.ini';
            I = INI('File',File);
            I.read();
            data = I.get('UserData'); % struct
        end
        
        function n = get_n
            data = setting.load_setting;
            n = data.m + 2;
        end

        function q = get_q
            data = setting.load_setting;
            temp = data.q;
            q           = fieldnames(temp);        
        end
    end
end

我想知道是否可以在 class 中定义的其余方法中自动访问 load_setting 返回的 data 而不是调用它 data = load_setting 在每个方法中。建议将非常有帮助。

常量通常由 MATLAB 中的函数提供。例如,pi 是一个函数。提供从文件读取的常量数据的函数可以这样写,使用关键字 persistent(代码未测试):

function data = config_data
   persistent data;
   if isempty(data)
      File = 'Configuration.ini';
      I = INI('File',File);
      I.read();
      data = I.get('UserData');
   end
end

现在第一次使用 config_data 时,它会加载数据。随后它将立即 return 数据结构。在最新版本的 MATLAB 中,您可以对函数的 return 值使用点索引,因此您可以执行 config_data().mconfig_data().q 并从数据中获取相关字段。上面的函数可以进一步处理数据以获得在静态 class 方法中计算的 qn 值,因此您不需要 setting 中的任何内容class,只要所有数据都是静态的。

如果你需要你的常量数据是一个 class 而不是一个函数(动态计算值的静态方法,或使用输入值),我会把上面的插入你的 class作为静态函数 load_setting,因为这会导致最少的工作量。

有一种方法可以创建常量 属性,您可以更改它!它通过class组成。 首先你应该定义一个引用(句柄)类型的数据class:

classdef dataclass<handle
    properties
        m=3;
        n=4;
    end
end

然后在您的设置中创建常量数据 属性 class :

classdef setting
    properties (Constant)
        data=dataclass()
    end
    methods (Static)
        function somefunc()
            a=setting();
            a.data.n=1;
            a.data.m=2;
        end
        function out=showdata()
            out=setting.data;
        end
    end
end

这样你就有了对数据的常量引用,当你调用 A.somefunc() 时你可以在所有 class 和 class 的所有对象中更改它。