matlab - Matlab 中的静态属性

标签 matlab oop properties static matlab-class

我想要一个类似于 Matlab 的 OOP 界面,在某种程度上我有类似的东西

classdef Foo
 properties (Constant)
  dict = NaN;
 end
 methods (Static)
  function list = search(varargin)
   %...
   Foo.dict = cell(10,5); % etc..
  end
 end
end

这样我就可以访问和修改(静态)属性。我应该如何设置呢?我猜不是不变..

更新: 我的问题是 t9.load(); 不更新 t9.dict

classdef t9
    %T9 Summary of this class goes here
    %   Detailed explanation goes here

    properties% (Static)
        dict = {};
    end

    methods (Static)
        function load()
            load('usdict.mat');
            t9.dict = usdict;
        end
        function matches = search(varargin)
            matches = {};
            num_words = nargin-1;
            for word=t9.dict(num_words, :)
                if strcmp(word,'')
                    continue;
                end
                word_cell = word{1};
                success = true;
                for i=1:num_words
                    char = word_cell(i);
                    if ~ismember(char, varargin{i})
                        success = false;
                    end
                end
                if success, matches{end+1} = word_cell; end
            end
        end
    end

end

愿望:

t9.load();
t9.search('ABC', 'DEF');
t9.search('DEF', 'GHI', 'MNO');

最佳答案

我会将 dict 维护为从属属性,并让它引用包含静态数据的持久变量,如下所示。这样,您可以使用构造函数或直接使用对象实例设置来更新 dict。所有实例都将共享您赋予它的任何值,即使是从 .mat 文件加载时也是如此。

 classdef myclass

 properties (Dependent) 
     dict   
 end

 methods

     function obj=set.dict(obj,val)

          manageDict('set',val);

     end

     function val=get.dict(obj)

         val=manageDict('get');

     end

     function obj=myclass(dict)

         obj.dict=dict;


     end

 end

end


function varargout=manageDict(op,newdict)

   persistent dictStatic;

   switch op

       case 'get'

           varargout{1}=dictStatic;

       case 'set'    

           dictStatic=newdict;

   end


end

关于matlab - Matlab 中的静态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605601/

相关文章:

matlab - 在 MATLAB 中执行 LU 分解而不旋转

c# - 在不修改原始类的情况下访问类保护字段

c++ - 使用赋值运算符时 C++ 中的编译错误 =?

python - self.__dict__.update(**kwargs) 风格是好还是坏?

Matlab:如何随机排列和逆排列向量

matlab - 对于 Matlab,从 xlsx 导入数据,如何获取第一行作为变量名称,以及该列的其余部分作为变量名称的数据

MATLAB - 使用时间戳

css - 如何使用 CSS 隐藏和显示单独的 div

c# - 您可以通过 Property setter 实例化对象吗?

objective-c - Objective-C中的ivars和属性有什么区别