我有一个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匹配。感谢。
答案 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}
%#...