Use of Persistent Variables in Class Methods Producing Incorrect Result.
Ältere Kommentare anzeigen
I am attempting to make use of a persistent variable within a class method. However, invoking the method from different instances is producing incorrect results. Here is a simple case of what I mean:
CLASS:
classdef MYCLASS < handle
properties(GetAccess = 'private', SetAccess = 'private')
m_Count
end
methods(Access = 'public')
%constructor
function obj = MYCLASS
obj.m_Count = 0;
end
function out = DO_SOMETHING_MOUSE(obj)
persistent n
if isempty(n)
n = 0;
end
n = n+1;
out = n;
end
function out = DO_SOMETHING_CAT(obj)
obj.m_Count = obj.m_Count + 1;
out = obj.m_Count;
end
end
end
MATLAB FILE:
clear all
clear classes
clc
Instance_A = MYCLASS;
Instance_B = MYCLASS;
n = Instance_A.DO_SOMETHING_MOUSE
n = Instance_B.DO_SOMETHING_MOUSE
n = Instance_A.DO_SOMETHING_CAT
n = Instance_B.DO_SOMETHING_CAT
COMMAND WINDOW RESULTS:
a =
1
b =
2
a =
1
b =
1
>>
Here you can see that we call the DO_SOMETHING_MOUSE method from two different instances of the class, yet, the value of the persistent variable "n" was somehow shared between instances.
The result we should have gotten is that which was illustrated by the call to the DO_SOMETHING_CAT method. Each instance had it's own value correctly stored.
What's wrong?
Akzeptierte Antwort
Weitere Antworten (1)
per isakson
am 23 Mai 2015
Bearbeitet: per isakson
am 23 Mai 2015
1 Stimme
I reproduced the behavior with R2013a and it's not what I would have expected. However, whether it's "incorrect results" depends on what the documentation says.
It resembles a case, which is discussed at UndocumentedMatlab, Handle object as default class property value. See especially the comment by David Foti at April 10, 2015 at 2:42 pm.
Kategorien
Mehr zu Construct and Work with Object Arrays finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!