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 类型和大小 mx[ 的矩阵=22=]。 (您可以通过在 MATLAB 控制台中键入 a(2,2) = 0 来验证普通变量的这一点 - 它会 return 一个 2×2 的零矩阵)。