我想在MATLAB中定义以下函数:
file = @(var1,var2,var3,var4) ['var1=' num2str(var1) 'var2=' num2str(var2) 'var3=' num2str(var3) 'var4=' num2str(var4)'];
但是,我想在添加更多参数时扩展该功能;如果我想添加变量vark
,我希望函数为:
file = @(var1,var2,var3,var4,vark) ['var1=' num2str(var1) 'var2=' num2str(var2) 'var3=' num2str(var3) 'var4=' num2str(var4) 'vark=' num2str(vark)'];
有没有系统的方法来做到这一点?
答案 0 :(得分:2)
f = @(varargin) fprintf('var%i= %i\n', [(1:numel(varargin));[varargin{:}]])
f(5,6,7,88)
var1= 5
var2= 6
var3= 7
var4= 88
我使用的格式为:'var%i= %i\n'
。这意味着它将首先写var
然后%i
说它应该输入一个整数。此后,它应该写下=
后跟一个新号码:%i
和换行符\n
。
它将为var%i
选择奇数位置的整数,为实际数字选择偶数位置的整数。由于MATLAB中的线性索引是列的列,我们将向量[1 2 3 4 5 ...]
置于顶部,将变量的内容置于第二行。
顺便说一下:如果你真的想要它在问题中指定的格式,请跳过\n
:
f = @(varargin) fprintf('var%i= %i', [(1:numel(varargin));[varargin{:}]])
f(6,12,3,15,5553)
var1= 6var2= 12var3= 3var4= 15var5= 5553
另外,您可以change the second %i
to floats (%f
), doubles (%d
) etc.
如果您想在输入中使用实际变量名称var1, var2, var3, ...
,那么我只能说一件事:不要!这是一个可怕的想法。使用单元格,结构或除编号变量名之外的任何其他内容。
只是要冷静清楚:不要在MATLAB中结合使用eval
的输出! eval
是邪恶的。 Mathworks实际上在官方文档中警告你这一点!
答案 1 :(得分:0)
如果您希望函数接受灵活数量的输入参数,则需要varargin
。
如果您希望最终字符串由您工作区中的变量名称组成,我找不到任何方法,因为您需要varargin
然后看起来不可能。但是,如果您在字符串中使用var1
,var2
,则可以定义此函数然后使用它:
function str = strgen(varargin)
str = '';
for ii = 1:numel(varargin);
str = sprintf('%s var%d = %s', str, ii, num2str(varargin{ii}));
end
str = str(2:end); % to remove the initial blank space
它也与字符串兼容。测试它:
% A = pi;
% B = 'Hello!';
strgen(A, B)
ans =
var1 = 3.1416 var2 = Hello!
答案 2 :(得分:0)
如何多次调用函数作为参数个数?考虑到函数返回的字符串的具体形式,我写了这个,其中k被假定为' kth'的索引。要输入的变量。 Array var可以是数字参数的列表。
int* foo() {
int a = 5;
return &a;
}
int main() {
int* p = foo();
// Prints 5
std::cout << "Coming from foo = " << *p << std::endl;
*p = 8;
// Prints 8
std::cout << "Setting explicitly = " << *p << std::endl;
}