Resetting a memoized function

I know that clearCache will clear the cache of a MemoizedFunction, but how would you reset its other properties to their defaults? I would have thought that rebuilding it with memoize() would do so, but the test below shows that that does not work.
mf=memoize(@localFcn) %default property values
mf =
MemoizedFunction with properties: Function: @localFcn Enabled: 1 CacheSize: 10
mf.CacheSize=3; mf.Enabled=false %make some non-default property settings
mf =
MemoizedFunction with properties: Function: @localFcn Enabled: 0 CacheSize: 3
clear mf
mf=memoize(@localFcn) %clear and rebuild -- but property values do not reset!!!!
mf =
MemoizedFunction with properties: Function: @localFcn Enabled: 0 CacheSize: 3
function y=localFcn(x)
y=x.^2;
end

 Respuesta aceptada

Walter Roberson
Walter Roberson el 25 de Feb. de 2026 a las 1:25

1 voto

According to +matlab/+lang/MemoizedFunction.m
% 2. MemoizedFunction objects are persistent to a session of MATLAB.
% For Example:
% f = memoize(@plus);
% f.Enabled = 0; % By default, Enabled == true
% clear f; % Only clears the object f.
% h = memoize(@plus);
% isequal( h.Enabled, false ); % State that was set by 'f'
So this is by design.

1 comentario

Matt J
Matt J el 25 de Feb. de 2026 a las 17:44
The behavior is clearly by design, but surely there are cases where you would want to restart the memoization process from scratch, without quitting Matlab. It seems the only way to do that is to manually set the properties every time you want to do so.

Iniciar sesión para comentar.

Más respuestas (1)

Catalytic
Catalytic el 25 de Feb. de 2026 a las 20:00
Editada: Catalytic el 25 de Feb. de 2026 a las 20:04
One way to have the behavior you're talking about is to wrap the function in an anonymous function --
mf=memoize(@(x)localFcn(x)) %default property values
mf =
MemoizedFunction with properties: Function: @(x)localFcn(x) Enabled: 1 CacheSize: 10
mf.CacheSize=3; mf.Enabled=false %make some non-default property settings
mf =
MemoizedFunction with properties: Function: @(x)localFcn(x) Enabled: 0 CacheSize: 3
Now, when you rebuild the original anonymous function dies so the memoization starts fresh --
clear mf
mf=memoize(@(x)localFcn(x)) %clear and rebuild
mf =
MemoizedFunction with properties: Function: @(x)localFcn(x) Enabled: 1 CacheSize: 10
function y=localFcn(x)
y=x.^2;
end

1 comentario

Catalytic
Catalytic el 25 de Feb. de 2026 a las 20:04
But you can't do it this way because a reference fh to the function handle lingers in the workspace throughout --
fh=@(x)localFcn(x);
mf=memoize(fh) %default property values
mf =
MemoizedFunction with properties: Function: @(x)localFcn(x) Enabled: 1 CacheSize: 10
mf.CacheSize=3; mf.Enabled=false %make some non-default property settings
mf =
MemoizedFunction with properties: Function: @(x)localFcn(x) Enabled: 0 CacheSize: 3
clear mf
mf=memoize(fh)
mf =
MemoizedFunction with properties: Function: @(x)localFcn(x) Enabled: 0 CacheSize: 3
function y=localFcn(x)
y=x.^2;
end

Iniciar sesión para comentar.

Categorías

Más información sobre Performance and Memory en Centro de ayuda y File Exchange.

Productos

Versión

R2024b

Etiquetas

Preguntada:

el 24 de Feb. de 2026 a las 23:43

Editada:

el 25 de Feb. de 2026 a las 20:04

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by