MATLAB 在单元格分配中使用冒号运算符

MATLAB Using colon operator with cell assignment

我使用以下代码行将元胞数组的第一列设置为 false,以便它可以用于 uitable 中的复选框:

result{:,1} = false;

它 运行 正如预期的那样多次,但似乎 运行domly 抛出了这个错误:

The right hand side of this assignment has too few values
to satisfy the left hand side.

我最终将行更改为:

result(:,1) = {false};

它似乎和以前一样工作。

第一种方法行不通有什么原因吗?或者它会工作一段时间然后停止的任何原因?

你原来的线路

result{:,1} = false;
如果 result 有一行,

将起作用,但如果它有几行,则不起作用。所以我的猜测是 它最初工作是因为 result 有一行,但停止工作是因为 result 获得了新行 .

为什么会这样?

result为单行,语句result{:,1} = false;result{1,1} = false;相同,即“设置左上单元格的内容resultfalse”,很好。但是,如果 resultn 行,则语句 result{:,1} = false; 的左侧是 n 单元格内容的 comma-separated list您不能将单个 分配给多个单元格的 内容。 Matlab 不会自动复制该值并将其作为所有这些单元格的内容。

一个解决方案是告诉 Matlab 使用 deal 进行复制(这实际上 "deals" 所有左侧的值 "receivers"):

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

当然,如果只有一行,这也有效。

另一种可能性是像您一样使用

    result(:,1) = {false};

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