2016-10-07 8 views
1

私は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)']; 

は、これを行うための体系的な方法はありますか?

+1

出力を 'eval'で後で使用するつもりはないですか? –

+0

あなたの問題を解決した場合は、回答の1つを受け入れることを検討してください。それは答えの左側のチェックマークです。ありがとう! :) –

答えて

2

使用fprintf

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 ...]を上に置き、変数の内容を第2行に置きます。ところで

:あなたが実際にあなたが質問で指定された形式でそれをしたい場合は、\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, ...を入力すれば、私はただ一つだけ言うことができます:Do not!それはひどい考えです。セル、構造体、または番号付き変数名以外のものを使用してください。

これは、MATLABの出力をevalと組み合わせて使用​​しないでください。 evalはevilです。 Mathworksは実際に公式文書でこれについて警告しています!

0

関数に柔軟な入力引数を受け入れる場合は、vararginが必要です。

最終的な文字列をワークスペースの変数の名前で構成したい場合は、vararginが必要なので、私は方法が見つからないと思われます。しかし、あなたはあなたの文字列にvar1var2を有する罰金している場合、あなたはこの関数を定義し、それを使用することができます。

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! 
0

パラメータの数だけ関数を呼び出すのはどうですか?私はあなたの関数によって返される文字列の特定の形式を考慮してこれを書いています。ここで、kは入力される 'kth'変数のインデックスとみなされます。配列varは、数値パラメータのリストです。このためvarargin

[email protected](var,i)[strcat('var',num2str(i),'=') num2str(var) ]; 

var=[2,3,4,5]; 

str=''; 

for i=1:length(var); 

str=strcat(str,file(var(i),i)); 

end 
関連する問題