永続変数を使用するメソッドを含むMATLABクラスがあります。特定の条件が満たされた場合、メソッドが属するオブジェクトをクリアせずに永続変数をクリアする必要があります。私はこれを行うことができましたがclear functions
、私の目的のために過度に広い範囲を持っているものを採用することによってのみです。
この問題のclassdef.mファイル:
classdef testMe
properties
keepMe
end
methods
function obj = hasPersistent(obj)
persistent foo
if isempty(foo)
foo = 1;
disp(['set foo: ' num2str(foo)]);
return
end
foo = foo + 1;
disp(['increment foo: ' num2str(foo)]);
end
function obj = resetFoo(obj)
%%%%%%%%%%%%%%%%%%%%%%%%%
% this is unacceptably broad
clear functions
%%%%%%%%%%%%%%%%%%%%%%%%%
obj = obj.hasPersistent;
end
end
end
このクラスを使用するスクリプト:
test = testMe();
test.keepMe = 'Don''t clear me bro';
test = test.hasPersistent;
test = test.hasPersistent;
test = test.hasPersistent;
%% Need to clear the persistent variable foo without clearing test.keepMe
test = test.resetFoo;
%%
test = test.hasPersistent;
test
これからの出力は次のとおりです。
>> testFooClear
set foo: 1
increment foo: 2
increment foo: 3
increment foo: 4
set foo: 1
test =
testMe
Properties:
keepMe: 'Don't clear me bro'
Methods
これが目的の出力です。問題はclear functions
、classdefファイルの行がメモリ内のすべての関数をクリアすることです。はるかに小さなスコープでクリアする方法が必要です。たとえば、hasPersistent' was a function instead of a method, the appropriately scoped clear statement would be
hasPersistent`をクリアした場合。
私はそれを知っています、clear obj.hasPersistent
そしてclear testMe.hasPersistent
両方とも永続変数をクリアすることに失敗します。clear obj
同様に悪い考えです。