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