【问题标题】:Dynamic value assignment in MatlabMatlab中的动态赋值
【发布时间】:2011-08-29 23:36:32
【问题描述】:

我有一个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 输出计数将与 LHS 的 desired statement 匹配。谢谢。

【问题讨论】:

  • 你熟悉dynamic structure references吗?通常,它们的明智使用可以解决对eval 的需求——而且它们的速度非常快。

标签: matlab dynamic eval cell variable-assignment


【解决方案1】:

这是 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}
%#...

【讨论】:

    猜你喜欢
    • 2013-11-11
    • 2011-02-24
    • 1970-01-01
    • 2011-10-06
    • 2014-08-29
    • 1970-01-01
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多