我在MATLAB中编写了一个简单的类来管理一组键值对。我希望能够在对象名称之后使用点来访问键,如:
params.maxIterations
而不是:
params.get('maxIterations')
是否可以覆盖点运算符以便调用我的get()方法?
我试图按照建议的here覆盖subsasgn()方法,但我无法弄清楚应该如何编写它。
答案 0 :(得分:5)
您可以使用dynamic properties。然后,不是添加字符串列表,而是为每个“键”添加新属性。获取properties(MyClass)
(仅fieldnames(MyClass)
但是,我认为重载subsref
确实是最好的,但请注意,如果你第一次这样做,那么正确地可能会耗费大部分工作周。 。这不是真的很难,只是()
运算符 这么多:)
幸运的是,你没必要。方法如下:
classdef MyClass < handle
methods
function result = subsref(obj, S)
%// Properly overloading the () operator is *DIFFICULT*!!
%// Therefore, delegate everything to the built-in function,
%// except for 1 isolated case:
try
if ~strcmp(S.type, '()') || ...
~all(cellfun('isclass', S.subs, 'char'))
result = builtin('subsref', obj, S);
else
keys = S.subs %// Note: cellstring;
%// could contain multiple keys
%// ...and do whatever you want with it
end
catch ME
%// (this construction makes it less apparent that the
%// operator was overloaded)
throwAsCaller(ME);
end
end % subsref method
end % methods
end % class