MATLAB OOP 中的对象数组实现
Object array implemenation in MATLAB OOP
假设我们在 MATLAB R2014b 中有这个 class :
classdef Pre
properties
Value
end
methods
function obj = Pre(F)
if nargin ~= 0
m = size(F,1);
n = size(F,2);
obj(m,n) = Pre;
for i = 1:m
for j = 1:n
obj(i,j).Value = F(i,j);
end
end
end
end
end
end
1) 如果我们从这段代码中删除 if nargin~=0
,就会出现这个错误:
Error using Pre (line 13)
Not enough input arguments.
Error in Pre (line 15)
obj(m,n) = Pre;
为什么?我认为这只是检查输入参数的数量!
2)什么是obj(m,n) = Pre;
?这条线在这段代码中做了什么?这是为了预分配,但这条线如何做到这一点?
我用这个语法检查了这个 class:az = Pre([2 3 5;5 3 0])
1) 在行 obj(m,n) = Pre;
中你调用 Pre
没有任何输入参数,所以变量 F
不存在于那个函数调用。因此它将无法执行 size(F,1)
等操作。MATLAB 通过抛出错误 not enough input arguments
来防止这种情况发生。只要您希望调用带有或不带输入参数的 Pre
的可能性,您就需要检查参数是否存在。
2) 这会进行预分配。通过在 obj
的 (m,n)
位置创建一个空的 Pre
,MATLAB 会将 obj
初始化为 Pre
类型和大小 m
x[ 的矩阵=22=]。 (您可以通过在 MATLAB 控制台中键入 a(2,2) = 0
来验证普通变量的这一点 - 它会 return 一个 2×2 的零矩阵)。
假设我们在 MATLAB R2014b 中有这个 class :
classdef Pre
properties
Value
end
methods
function obj = Pre(F)
if nargin ~= 0
m = size(F,1);
n = size(F,2);
obj(m,n) = Pre;
for i = 1:m
for j = 1:n
obj(i,j).Value = F(i,j);
end
end
end
end
end
end
1) 如果我们从这段代码中删除 if nargin~=0
,就会出现这个错误:
Error using Pre (line 13)
Not enough input arguments.
Error in Pre (line 15)
obj(m,n) = Pre;
为什么?我认为这只是检查输入参数的数量!
2)什么是obj(m,n) = Pre;
?这条线在这段代码中做了什么?这是为了预分配,但这条线如何做到这一点?
我用这个语法检查了这个 class:az = Pre([2 3 5;5 3 0])
1) 在行 obj(m,n) = Pre;
中你调用 Pre
没有任何输入参数,所以变量 F
不存在于那个函数调用。因此它将无法执行 size(F,1)
等操作。MATLAB 通过抛出错误 not enough input arguments
来防止这种情况发生。只要您希望调用带有或不带输入参数的 Pre
的可能性,您就需要检查参数是否存在。
2) 这会进行预分配。通过在 obj
的 (m,n)
位置创建一个空的 Pre
,MATLAB 会将 obj
初始化为 Pre
类型和大小 m
x[ 的矩阵=22=]。 (您可以通过在 MATLAB 控制台中键入 a(2,2) = 0
来验证普通变量的这一点 - 它会 return 一个 2×2 的零矩阵)。