我想要一个类似于 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/