如何在 Matlab 中声明动态变量名,该函数是否返回这些变量?
我希望函数返回带有动态变量名的字符串,并仅在给出迭代次数n
时返回。
我尝试了以下代码:
function [var] = myFunc(n)
for ii=1:n
var= ['var' num2str(ii)];
var{ii} = strcat('(some srting', var,')');
eval(['var' num2str(ii) ' = var']);
end
end
答案 0 :(得分:0)
案例1:这将为您提供以后可以使用的eval字符串,以实际获取var1
,var2
,var3
等值来自一些名为some_string_1
,some_string_2
,some_string_3
的变量。
function varargout = myFunc1(n)
for ii=1:n
eval_string = strcat('var',num2str(ii),'=','some_string_',num2str(ii));
varargout(ii) = {eval_string};
end
return;
样品运行:
5个可能的两个输出
[v1,v2] = myFunc1(5)
v1 =
VAR1 = some_string_1
v2 =
VAR2 = some_string_2
5个可能的4个输出
[v1,v2,v3,v4] = myFunc1(5)
v1 =
VAR1 = some_string_1
v2 =
VAR2 = some_string_2
v3 =
VAR3 = some_string_3
v4 =
VAR4 = some_string_4
对于这种情况的另一种解决方案可能是在单元格数组中获取字符串 -
function eval_strings_cell = myFunc1_1(n)
for ii=1:n
eval_strings_cell(ii) = {strcat('var',num2str(ii),'=','some_string_',num2str(ii))};
end
return;
示例运行:
三个输出
[var] = myFunc1_1(3)
var =
'var1=some_string_1' 'var2=some_string_2' 'var3=some_string_3'
案例2 :如果您希望评估var1
,var2
,var3
等的值,则需要传递要分配给它的值通过函数的输入参数,因为函数不能只从工作空间中选择变量。
因此,对于这种情况,您可以使用此 -
function varargout = myFunc2(n,some_string_1,some_string_2,some_string_3)
for ii=1:n
eval_string = strcat('varargout(',num2str(ii),')=','{some_string_',num2str(ii),'}');
evalc(eval_string);
end
return;
样品运行:
仅从前两个输入中选择值 -
[v1,v2] = myFunc2(2,10,12,13)
v1 =
10
v2 =
12
从所有三个输入中选择值 -
[v1,v2,v3] = myFunc2(3,10,12,13)
v1 =
10
v2 =
12
v3 =
13
案例3:如果您正在寻找类似上述情况的内容,则不需要eval
。您可以直接将值输入varargout
,如下所示 -
function varargout = myFunc3(n,varargin)
for ii=1:n
varargout(ii) = varargin(ii);
end
return;
样品运行:
三个输入,两个输出 -
[v1,v2] = myFunc3(2,10,12,13)
v1 =
10
v2 =
12
三个输入,三个输出
[v1,v2,v3] = myFunc3(3,10,12,13)
v1 =
10
v2 =
12
v3 =
13