如何声明句柄数组
How to declare handle array
在 MATLAB 中使用循环填充数组时,代码分析器会抛出警告 The variable 'foo' changes appears to change size on every loop iteration. Consider preallocating for speed.
典型案例:
for ii=1:3
foo(ii)=rand;
bar{ii}=rand;
end
显然,这可以通过预分配轻松解决。
foo=nan(3,1);bar=cell(3,1);
for ii=1:3
foo(ii)=rand;
bar{ii}=rand;
end
问题是当我不填充数字或元胞数组而是处理数组时,通常是一组可从代码的不同部分访问的行。
我找到了一种解决方法 - 向后循环:
for ii=3:-1:1
foo(ii)=line(nan,nan);
end
但是除了 %#ok<*NASGU>
或 %#ok<NASGU>
评论之外,还有更巧妙的方法来消除警告吗?
由于您正在创建线条对象,因此有一个专门的解决方法可以完全避免循环。您可以将值矩阵传递给 line
以每列创建一行。例如,这将创建 3 个线对象并将句柄存储在一个 3×1 向量中:
h = line(nan(2, 3), nan(2, 3));
一种解决方案是将句柄存储在 double
数组中:
foo = zeros(3,1);
for ii=1:3
foo(ii)=double(line(nan,nan));
end
您可以使用 handle()
方法将它们转换回句柄。但大多数时候你不需要明确地这样做。您可以直接使用带有数字表示的 get
和 set
函数。
函数 gobjects
就是为此目的而设计的 - 它会 return 为您预先分配一个 matlab.graphics.GraphicsPlaceholder
对象数组,其大小由您指定。然后,您可以用线条等图形对象填充数组。
请注意,您可以使用 isgraphics
有用地测试该数组的元素 - 实际图形句柄的元素将 return true
,而 GraphicsPlaceholder
的元素将return false
.
如果您只想关闭警告,那么 %#ok
评论是正确的方法。您可以在首选项中全局关闭警告,这意味着您可以省略 %#ok
注释,但这意味着您会错过所有预分配的警告,而不仅仅是图形句柄数组。
在 MATLAB 中使用循环填充数组时,代码分析器会抛出警告 The variable 'foo' changes appears to change size on every loop iteration. Consider preallocating for speed.
典型案例:
for ii=1:3
foo(ii)=rand;
bar{ii}=rand;
end
显然,这可以通过预分配轻松解决。
foo=nan(3,1);bar=cell(3,1);
for ii=1:3
foo(ii)=rand;
bar{ii}=rand;
end
问题是当我不填充数字或元胞数组而是处理数组时,通常是一组可从代码的不同部分访问的行。
我找到了一种解决方法 - 向后循环:
for ii=3:-1:1
foo(ii)=line(nan,nan);
end
但是除了 %#ok<*NASGU>
或 %#ok<NASGU>
评论之外,还有更巧妙的方法来消除警告吗?
由于您正在创建线条对象,因此有一个专门的解决方法可以完全避免循环。您可以将值矩阵传递给 line
以每列创建一行。例如,这将创建 3 个线对象并将句柄存储在一个 3×1 向量中:
h = line(nan(2, 3), nan(2, 3));
一种解决方案是将句柄存储在 double
数组中:
foo = zeros(3,1);
for ii=1:3
foo(ii)=double(line(nan,nan));
end
您可以使用 handle()
方法将它们转换回句柄。但大多数时候你不需要明确地这样做。您可以直接使用带有数字表示的 get
和 set
函数。
函数 gobjects
就是为此目的而设计的 - 它会 return 为您预先分配一个 matlab.graphics.GraphicsPlaceholder
对象数组,其大小由您指定。然后,您可以用线条等图形对象填充数组。
请注意,您可以使用 isgraphics
有用地测试该数组的元素 - 实际图形句柄的元素将 return true
,而 GraphicsPlaceholder
的元素将return false
.
如果您只想关闭警告,那么 %#ok
评论是正确的方法。您可以在首选项中全局关闭警告,这意味着您可以省略 %#ok
注释,但这意味着您会错过所有预分配的警告,而不仅仅是图形句柄数组。