sự thường xuyên Matlab chức năng gọi stack là chính nó là một đống không gian làm việc. Chỉ cần sử dụng các hàm là cách dễ nhất để sử dụng một hàm, và bản sao chép-ghi-viết của Matlab làm cho việc này trở nên hiệu quả một cách hợp lý. Nhưng đó có lẽ không phải những gì bạn đang yêu cầu.
Có sự tương ứng tự nhiên giữa không gian làm việc và cấu trúc, vì cùng số nhận dạng hợp lệ cho các tên biến và trường cấu trúc. Cả hai bản chất đều là định danh => ánh xạ Mxarray.
Bạn có thể sử dụng whos
và evalin
để nắm bắt trạng thái vùng làm việc thành cấu trúc. Sử dụng một vector tế bào để thực hiện một chồng của chúng. (Một mảng cấu trúc sẽ không hoạt động vì nó yêu cầu tên trường đồng nhất.) Ngăn xếp có thể được lưu trữ trong appdata để ngăn không cho nó xuất hiện trong chính vùng làm việc.
Dưới đây là các chức năng push và pop cho kỹ thuật này.
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
Nguồn
2009-12-01 15:47:58
Với tất cả rực rỡ này, chức năng vẫn là một cách tốt hơn để làm việc đó .. Trong thực tế, đây là chính xác như thế nào chức năng không gian làm việc được thực hiện tôi nghi ngờ. –