提问人:bokabokaboka 提问时间:8/25/2023 最后编辑:bokabokaboka 更新时间:8/28/2023 访问量:58
在什么情况下我们需要使用“空”方法?“空”方法有什么好处?
What situations do we need to use the `empty` method? What benefits does the `empty` method provide?
问:
方法 empty 创建一个空数组。我们需要在什么情况下使用该方法?该方法有什么好处?它是否会通过预分配提高效率?它们对用户有不同的影响吗?empty
empty
输入:
A = ColorInRGB.empty(1,0);
B = ColorInRGB1();
A
是 1x0 , .
是 1x1 , .ColorInRGB
memorysize=0
B
ColorInRGB
memorysize=0
和 和有什么不一样?空的 1x0 和空的 1x1 有什么区别?或者 5x0 和 1x1 空之间有什么区别吗?如果没有区别,我们为什么要使用这种方法?A
B
empty
ColorInRGB.m
classdef ColorInRGB
properties
Color (1,3) = [1,0,0];
end
methods
function obj = ColorInRGB(c)
if nargin > 0
obj.Color = c;
end
end
end
end
ColorInRGB1.m
classdef ColorInRGB1
properties
Color; % (1,3) = [1,0,0];
end
methods
% function obj = ColorInRGB(c)
% if nargin > 0
% obj.Color = c;
% end
% end
end
end
2023/08/27 12:59 这两个类是不同的。我的问题是,ColorInRGB1()可以帮助我获得一个空数组,那么为什么我们仍然需要一个“空方法”呢?一旦我知道了它们之间的区别,我就可以理解何时在什么场景中使用 ColorInRGB1() 以及何时使用 ColorInRGB.empty(1,0);在其他方面。
答:
0赞
Cris Luengo
8/27/2023
#1
B
是一个 1x1 对象数组,其唯一字段是空数组。 是一个 1x0 对象,它没有元素。A
B
不是空数组,而是包含空数组。 是一个空数组。A
我理解为什么区别不明显。两者都不包含任何数据(这是工作区资源管理器和命令报告的“内存大小”,其中不包括对象本身的开销)。但也有明显的区别:whos
- 该测试对 为 true,但对 不适用。
isempty
A
B
- 我们可以索引为 : is valid, is not。 是有效的,转让也是有效的;你不能用 .
B
B(1)
A(1)
B.Color
B.Color = 'foo'
A
这与空元胞数组和 1x1 元胞数组之间的区别完全相同,后者包含空数组。{}
{[]}
如果你想知道为什么可以创建一个 1x0 数组,而不是只有一个0x0数组,以及为什么我们想要空数组,请参阅这个问题和另一个问题。empty
评论
ColorInRGB.empty(0,5)
0x5 ColorInRGB array
1x0
A
B
isempty(A)
isempty(B)
ColorInRGB1()
empty
ColorInRGB1()
ColorInRGB.empty(1,0);