小编jmh*_*mhl的帖子

matlab subsref:{}带字符串参数失败,为什么?

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深度提取字典条目层,否则这似乎是一个不错的选择.重写类subsrefsubsasgn操作似乎很容易{}就像以前那样做同样的事情(),一切都应该有效.

当我尝试它时,它不会.

这是我的代码.(我把它减少到一个最小的情况.这里没有实现实际的字典,每个对象有一个键和一个值,但这足以证明问题.)

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)

oop matlab dictionary hashtable operator-overloading

5
推荐指数
1
解决办法
1121
查看次数