我在访问作为数组的(依赖)属性的单个值时遇到了严重的性能问题。似乎在获取值时,会返回属性的完整数组,并在之后对其进行索引。
当对数组属性调用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)
方法必须知道结果值会发生什么——这将使"通用"实现变得更加复杂。