Matlab OOP:在数组 属性 上调用 get 函数时到底发生了什么?

Matlab OOP: What happens exactly when a get function is called on a property that is an array?

我在获取访问作为数组的(相关)属性的单个值时遇到了严重的性能问题。似乎在获取值时,返回了 属性 的完整数组,并在 later.

上进行了索引

在数组 属性 上调用 get 函数时究竟发生了什么?

代码示例:

% class definition
classdef ArrayProp
    properties
        array
    end
    methods
        function obj = ArrayProp(input)
            obj.array = input;
        end
        function output = get.array(obj)
            output = obj.array
            numel(obj.array)
            numel(output)  
        end
    end 
end

% test script
array         = rand(2,1);
myArray       = ArrayProp(array);
returnedValue = myArray.array(1)

% command window result
output =
0.6180
0.7304
ans =
 2
ans =
 2
returnedValue =
 0.6180

请注意,输出的元素数量为 2,但只有 1 值返回给变量。本实验使用Matlab2011b进行

您的观察是正确的。

基本上,内部发生的事情(MATLAB 是闭源的,这显然只是或多或少有根据的猜测)类似于以下内容:

您的代码:

returnedValue = myArray.array(1)

内部:

intermediate = myArray.array; # this invokes get.array(myArray)
returnedValue = intermediate(1);

如果您考虑一下 - 这是唯一合理的方法。 任何其他方式都要求 get.array(obj) 方法必须知道结果值会发生什么——这会使 "universal" 实现更加复杂。