Matlab OOP:当在数组属性上调用get函数时,会发生什么



我在访问作为数组的(依赖)属性的单个值时遇到了严重的性能问题。似乎在获取值时,会返回属性的完整数组,并在之后对其进行索引。

当对数组属性调用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)方法必须知道结果值会发生什么——这将使"通用"实现变得更加复杂。

相关内容

  • 没有找到相关文章

最新更新