Mathworks File Exchange存储库中有一些哈希或字典类的实现.我所看到的只是使用括号重载来进行键引用,例如
d = Dict;
d('foo') = 'bar';
y = d('foo');
Run Code Online (Sandbox Code Playgroud)
这似乎是一个合理的界面.但是,如果你想轻松拥有包含其他词典的词典,最好使用大括号{}
而不是括号,因为这样可以让你绕过MATLAB(任意的,似乎是)语法限制,不允许使用多个括号但是多个允许括号,即
t{1}{2}{3} % is legal MATLAB
t(1)(2)(3) % is not legal MATLAB
Run Code Online (Sandbox Code Playgroud)
因此,如果您希望能够轻松地在词典中嵌套词典,
dict{'key1'}{'key2'}{'key3'}
Run Code Online (Sandbox Code Playgroud)
作为Perl中常见的习惯用法,并且在其他语言(包括Python)中可能并且经常有用,那么除非您想使用n-1
中间变量来n
深度提取字典条目层,否则这似乎是一个不错的选择.重写类subsref
和subsasgn
操作似乎很容易{}
就像以前那样做同样的事情()
,一切都应该有效.
当我尝试它时,它不会.
这是我的代码.(我把它减少到一个最小的情况.这里没有实现实际的字典,每个对象有一个键和一个值,但这足以证明问题.)
classdef TestBraces < handle
properties
% not a full hash table implementation, obviously
key
value
end
methods(Access = public)
function val = subsref(obj, ref)
% Re-implement dot referencing for methods.
if strcmp(ref(1).type, '.')
% User trying to …
Run Code Online (Sandbox Code Playgroud)