如何处理matlab中'='左侧的subsref

时间:2015-03-27 15:48:48

标签: matlab

如何处理matlab中'='左侧的subsref? 我的matlab函数中有一行像这样。

    s1.type = '{}';
    s1.subs = {5};
    s2.type = '()';
    index = 4 + (day - 1) * 4 + action;
    s2.subs = {index};
    subsref(subsref(pair(key),s1),s2) = subsref(subsref(pair(key),s1),s2) + 1;

pair是一个container.map,key是地图的关键 由于令人厌恶的语法,我必须使用subsref将'()'放在单元格的'{}'之前。

出现错误:

“subsref”以前似乎被用作函数或命令,与此处使用的变量名称相冲突。 导致此错误的一个可能原因是您忘记初始化变量,或者您已使用load或隐式初始化它 EVAL。

如何将subsref放在'='的左侧,或者这个表达式如何+1本身?

1 个答案:

答案 0 :(得分:2)

当您在右侧使用subsrefA(i)A{i}时(即当您索引表达式时),会调用

A.i

当您在左侧使用它们进行分配时 - 换句话说,当您使用A(i) = BA{i} = BA.i = B时,MATLAB会调用subsasgn(发音为“subs assign”)。

我不确定您的示例代码究竟在尝试做什么,但无论如何,我认为您需要调用subsasgn,而不仅仅是subsref

另外,我注意到你在一个containers.Map的变量上执行此操作。请注意containers.Map由于其不同寻常的语法,会使subsrefsubsasgn重载,您可能会发现很难做到您想要做的事情。有关该主题的更多信息,请参阅我的回答here

PS:您可能想发布一个单独的问题,询问如何解决您尝试解决的潜在问题。无论是什么,我都无法相信subsrefsubsasgn这种复杂程度是非常必要的。