matlab中有堆栈么,有没有办法将MATLAB工作区推送到堆栈?

常规的Matlab函数调用堆栈本身就是一堆工作区.只需使用函数是最简单的方法之一,而Matlab的写时复制功能使其效率相当高.但这可能不是你所要求的.

工作空间和结构之间有一个自然的对应关系,因为相同的标识符对变量名和结构域有效.它们本质上都是identifier => Mxarray映射.

您可以使用whos和evalin将工作空间状态捕获到结构体.使用单元格向量来实现它们的堆栈. (一个结构体数组将不起作用,因为它需要均匀的字段名称.)堆栈可以存储在appdata中,以防止它出现在工作区本身.

以下是这种技术的推送和弹出功能.

function push_workspace()

c = getappdata(0, 'WORKSPACE_STACK');

if isempty(c)

c = {};

end

% Grab workspace

w = evalin('caller', 'whos');

names = {w.name};

s = struct;

for i = 1:numel(w)

s.(names{i}) = evalin('caller', names{i});

end

% Push it on the stack

c{end+1} = s;

setappdata(0, 'WORKSPACE_STACK', c);

function pop_workspace()

% Pop last workspace off stack

c = getappdata(0, 'WORKSPACE_STACK');

if isempty(c)

warning('Nothing on workspace stack');

return;

end

s = c{end};

c(end) = [];

setappdata(0, 'WORKSPACE_STACK', c);

% Do this if you want a blank slate for your workspace

evalin('caller', 'clear');

% Stick vars back in caller's workspace

names = fieldnames(s);

for i = 1:numel(names)

assignin('caller', names{i}, s.(names{i}));

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值