興味深い質問です。私は実際にこの問題に遭遇したことはありません。制限についてすべてを知っておくことは常に良いことなので、グーグルで調べて、これparfor
を思いつきました:
テクニカル サポートからこの問題に対する回答を受け取りました。どうやら、Mathworks は、オブジェクトへの変更が返されないという「機能」と見なしているようですが、これが非常に便利な機能であるとは思えません。とにかく、parfor ループから返された変更されたクラス プロパティを取得する方法は、parfor によって認識できる明示的な変更を行うことです。上記のサンプル オブジェクトで機能する 2 つの例を次に示します。
parfor n = 1:num
exArray(n).data = n:n+5;
end
また
parfor n = 1:num
temp = exArray(n);
setData(temp,n:n+5);
exArray(n) = temp;
end
実際、オブジェクトのプロパティを変更すると、それも機能するようです。したがって、たとえばこれも機能します。明示的に設定された 2 番目のプロパティ data2 がある場合、data と data2 の両方が正しく返されます。
parfor n = 1:num
setData(exArray(n),n:n+5);
exArray(n).data2 = n:n+5;
end
例のオブジェクトは、
classdef Example < handle
properties
data
end
methods
function obj = Example(data)
obj.data = data;
end
function setData(obj,data)
obj.data = data;
end
function data = getData(obj)
data = obj.data;
end
end
end
配列は次のように単純に初期化されます
% Initialise array of objects
for n = 1:num
exArray(n) = Example(zeros(1,6));
end