MATLAB中冒号运算符的单元格赋值

uinbv5nw  于 2023-01-05  发布在  Matlab
关注(0)|答案(1)|浏览(161)

我用下面的代码行将一个单元格数组的第一列设置为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};

而且看起来和以前一样有效。
有没有什么理由说明第一种方法行不通,或者有没有什么理由说明它会奏效一段时间,然后停止?

ahy6op9u

ahy6op9u1#

你原来的台词

result{:,1} = false;

如果result只有一行就可以工作,但是如果它有几行就不行了。所以我的猜测是 * 它最初工作是因为result只有一行,但是停止工作是因为result获得了新的行
为什么会这样呢?
如果result只有一行,则语句result{:,1} = false;result{1,1} = false;相同,即"
result左上角单元格的内容设置为false",这是可以的,但是,如果resultn行,语句result{:,1} = false;的左侧是n单元格内容的comma-separated list您不能将单个 * 值 * 赋给多个单元格的 * 内容。matlab不会自动复制该值并将其作为所有这些单元格的内容。
一个解决方案是告诉Matlab使用deal进行复制(这有效地将该值"处理"给所有左侧的"接收者"):

result{:,1} = deal(false);

当然,如果只有一行,这也是可行的。
另一种可能性是,像你一样,

result(:,1) = {false};

这意味着"* 使result的第一列中的所有单元格等于包含false * 的单元格"。请注意与上一个案例的区别:现在我们将一个 * 单元格 * 分配给多个 * 单元格*。Matlab对此很满意,并自动复制右边的单元格。同样,这也适用于单行的特殊情况。

相关问题