Ngoài việc sử dụng LOAD và SAVE, không có chức năng tích hợp mà tôi biết để thực hiện việc này. Tuy nhiên, bạn chỉ có thể thực hiện các chức năng của riêng mình, như vậy:
function s = var2struct(varargin)
names = arrayfun(@inputname,1:nargin,'UniformOutput',false);
s = cell2struct(varargin,names,2);
end
function struct2var(s)
cellfun(@(n,v) assignin('base',n,v),fieldnames(s),struct2cell(s));
end
Làm việc từ không gian làm việc cơ bản, bạn có thể sử dụng các chức năng như vậy:
a = 'adsf'
b = rand(10);
x = var2struct(a,b);
clear a b
struct2var(x);
Một vài lưu ý:
Nếu bạn muốn chỉ định các đối số cho var2struct
làm tên biến thay vì các biến, thì đây là một thay thế f bôi:
function s = var2struct(varargin)
values = cellfun(@(n) evalin('base',n),varargin,'UniformOutput',false);
s = cell2struct(values,varargin,2);
end
Và bạn sẽ sử dụng này từ không gian làm việc cơ bản như sau:
x = var2struct('a','b');
Thật không may, bạn chỉ có thể sử dụng phiên bản này của các chức năng để có được biến từ không gian làm việc cơ bản, không phải là không gian làm việc của một hàm.
Thông báo trước với chức năng struct2var
ở trên là nó sẽ luôn tạo biến trong vùng làm việc cơ sở, không phải không gian làm việc của hàm gọi struct2var
. Để tạo các biến trong một không gian làm việc khác hơn là căn cứ, bạn sẽ phải sử dụng dòng này trong không gian làm việc đó thay vì gọi struct2var
:
cellfun(@(n,v) assignin('caller',n,v),fieldnames(x),struct2cell(x));
bạn không thể sử dụng evalin ('gọi', n) cho phiên bản thứ hai của var2struct? Dù sao, 1 cho một giải pháp đẹp bao gồm tấn Matlab tiên tiến. – Jonas
@Jonas: sử dụng 'evalin ('người gọi', n)' cho phiên bản thứ hai của 'var2struct' sẽ thực sự thực hiện đánh giá trong hàm gọi' evalin', chính nó sẽ là 'var2struct' chứ không phải hàm mà các cuộc gọi 'var2struct'. Đó là lý do tại sao tôi thích phiên bản đầu tiên của 'var2struct' tốt hơn ... nó có vẻ sạch hơn và linh hoạt hơn. – gnovice
D'oh !. Tôi nhớ bây giờ tôi đã phạm sai lầm đó trước đây. – Jonas