我有以下代码行将单元格数组的第一列设置为false,因此它可以用于合适的复选框:
result{:,1} = false;
它按预期运行了很多次,但似乎随机地抛出了这个错误:
The right hand side of this assignment has too few values
to satisfy the left hand side.
我最后将线路更改为:
result(:,1) = {false};
它似乎和以前一样。
有没有理由说第一种方式不起作用?或者为什么它会工作一段时间然后停止的任何原因?
答案 0 :(得分:2)
你原来的行
result{:,1} = false;
如果result
有一行,将起作用,但如果有几行则不行。所以我的猜测是最初有效,因为result
有一行,但由于result
获得了新行而停止了工作。
为什么会这样?
如果result
只有一行,则result{:,1} = false;
语句与result{1,1} = false;
相同,即“设置左上角单元格的内容{{1 } result
“,这很好。但是,如果false
有result
行,则语句n
的左侧是result{:,1} = false;
个单元格内容的comma-separated list。 您无法将单个值分配给多个单元格的内容 。 Matlab不会自动复制该值并将其作为所有这些单元格的内容。
一个解决方案是告诉Matlab使用deal
进行复制(这有效地将该值“交易”给所有左侧“接收者”):
n
当然,如果只有一行,这也有效。
另一种可能性就是像你一样使用
result{:,1} = deal(false);
这意味着“使 result(:,1) = {false};
的第一列中的所有单元格等于包含result
”的单元格。请注意与前一种情况的区别:现在我们将单元分配给多个单元 。 Matlab对此很满意,并自动复制右手单元格。同样,这也适用于单行作为特定情况。