我需要评估以下语句isfield(PKPD_1, 'gamma')
,其中PKPD_1
是一个将会发生变化的变量,并且“#gamma;'是一个字符串。
所以我的第一种方法是eval(['isfield(PKPD_' num2str(i) ', gamma'])
,但是这种方法gamma
变成了变量,而不是字符串。
我该如何解决这个问题?
答案 0 :(得分:3)
直接回答您的问题:使用两个单引号表示eval表达式中的单引号。
eval(['isfield(PKPD_' num2str(i) ', ''gamma'')'])
但是,正如你可能已经听过的那样,eval是邪恶的。在您的情况下,您很可能不需要使用eval
。由于我不知道您的代码的上下文,我认为您应该查看有关Matlab中eval备选方案的MathWorks页面。它可以帮到你:http://www.mathworks.com/help/matlab/matlab_prog/string-evaluation.html
欢呼声, 安德烈
答案 1 :(得分:2)
您正在循环并尝试检查PKPD_iterationnumber是否具有gamma。
您可以尝试这样做,例如:
for i=1:10
eval(sprintf(isfield(PKPD_%d, 'gamma'),i));
end
但是eval执行得更慢。请阅读:Matlab Looping Variables
答案 2 :(得分:1)
由于您的直接问题已得到解答,因此这里提出了如何避免使用eval的建议。 您可能可以使用动态索引。
http://www.mathworks.com/help/matlab/matlab_prog/generate-field-names-from-variables.html
如果您将所有结构体成员构建为单个结构,则可以像
一样循环for n = 1:length(bigStruct)
subStructName = sprintf('PKPD_%d',n);
isfield(bigStruct.(subStructName),'gamma');
end