Matlab中的动态值赋值

时间:2011-08-29 23:36:32

标签: matlab dynamic eval cell variable-assignment

我有一个cellarray,其值用于初始化相应的结构。

cellarr = {'NI' ; 'EQ' ; 'TA' } ;
defstr = struct('Raw', '-1')    ;

for i = 1:size(cellarr,1)
    eval([cellarr{i,1} '= defstr;'])  %Yes,I know eval is bad!Any other approach?
end

然后将新值填入Raw字段。

dataCell = [] ;
for i=1:size(cellarr,1)
    rawCell = [cellarr{i} '.Raw'] ;
    dataCell = strcat(dataCell, ', ', rawCell) ;
end
dataCell(1) = [] ;

DESIRED STATEMENT NOW  --> [NI.Raw,Eq.Raw,TA.Raw] = filldata()

function[a1,a2,a3] =  filldata(), a1 = 1 ; a2 = 2 ; a3 = 3 ; end

即使使用desired statement,我也无法执行eval。应该感谢你的帮助。 filldata输出计数将与desired statement的LHS匹配。感谢。

1 个答案:

答案 0 :(得分:0)

以下是EVAL的可能解决方案:

%# build and eval the string: [NI.Raw,Eq.Raw,TA.Raw] = filldata()
str = sprintf('%s.Raw,',cellarr{:});
str = sprintf('[%s] = filldata()', str(1:end-1));
eval(str);

与任何其他解释性语言一样,使用EVAL不是最佳实践(但您似乎已经知道)。 除非你特别需要变量的名称只能在运行时确定,否则我会使用单元格数组或结构数组(取决于你的需要):

N = 3;
result = cell(N,1);
[result{:}] = filldata();

%# now you can access the data as:
result{1}
result{2}
%#...