mlock not working, variables getting cleared in function switch.

4 次查看(过去 30 天)
M using Multiple function in a single '.m' file.
when i make a function call the previous data of the calling function is getting cleared.
Even if i use mlock then also data is getting cleared from in between function calls.
Is there any other method i can preserve variable and data of my main function.
  2 个评论
Geoff Hayes
Geoff Hayes 2020-8-25
as - how are you storing the previous data? Is this data the output from calling this function before? Can you provide an example that demonstrates this problem?
as
as 2020-8-26
编辑:as 2020-8-26
function add(a,b)
mlock
c= a+b
d = subtract(a,b)
end
function k = subtract(e,f)
k = e-f;
end
Thank you Geoff Hayes .In above code when program reaches at ->k=e-f , variable c get destroyed even though i used mlock. If this is not correct use of mlock then please provide an example. What i want is to preserve variable c till the end of execution of function add() and in between call other function too.
In my script i'am loading a ROM.m file with lots of variable in it which i will be using in simulation, but when i call another function workspace is getting cleared.

请先登录,再进行评论。

回答(1 个)

Jan
Jan 2020-8-25
编辑:Jan 2020-8-25
Create this file:
function demo(In)
persistent v
switch lower(In)
case 'lock'
mlock
disp('locked')
case 'unlock'
munlock
disp('unlocked')
case 'set'
v = rand
case 'show'
v
end
end
Now run it:
demo('show') % v is []
demo('set')
clear('demo') % v is cleared
demo('show') % v is []
demo('set') % v is set to a value
demo('show') % v keeps its value
demo('lock')
clear('demo') % v is not cleared
demo('show') % v kept its value
demo('unlock')
clear('demo') % v is cleared
demo('show') % v is [] again
So usually declaring a variable as persistent is sufficient already and you need mlock only, if a brute program calls clear all (which is a bad programming pattern!).
  2 个评论
as
as 2020-8-26
Thank you Jan, but here am loading a complete ROM file with lots of variable and their value, so i need to preserve that workspace for my entire run of that function and also call other function in between. Is it possible to load that ROM.m file as persistent?
Jan
Jan 2020-8-30
Of course the workspaces are cleared,when a function is left, except if a variable is stored persistently. So just import the "ROM file" (what ever this means) into a variable, which is declared as persistent.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Scope Variables and Generate Names 的更多信息

产品


版本

R2016b

Community Treasure Hunt

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

Start Hunting!

Translated by