如何处理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本身?
答案 0 :(得分:2)
subsref
,A(i)
或A{i}
时(即当您索引表达式时),会调用 A.i
。
当您在左侧使用它们进行分配时 - 换句话说,当您使用A(i) = B
,A{i} = B
或A.i = B
时,MATLAB会调用subsasgn
(发音为“subs assign”)。
我不确定您的示例代码究竟在尝试做什么,但无论如何,我认为您需要调用subsasgn
,而不仅仅是subsref
。
另外,我注意到你在一个containers.Map
的变量上执行此操作。请注意containers.Map
由于其不同寻常的语法,会使subsref
和subsasgn
重载,您可能会发现很难做到您想要做的事情。有关该主题的更多信息,请参阅我的回答here。
PS:您可能想发布一个单独的问题,询问如何解决您尝试解决的潜在问题。无论是什么,我都无法相信subsref
和subsasgn
这种复杂程度是非常必要的。