念のために言ってint
おきますが、変数名の選択はかなり不適切です。
それはさておき、次のようにやりたいことができます
sayfoo
は、ユーザーが入力した文字列を保持する変数です。次のことができます。
% eliminate leading/trailing whitespace
foo = strtrim(foo);
a = regexp('[a-zA-Z][a-zA-Z0-9_]*',foo));
if numel(a) == 0
fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif a ~= 1
fprintf('Sorry, %s is not a valid variable name in matlab\n', foo);
elseif 2 == exist(foo,'var')
fprintf('Sorry, %s already in use as a variable name.');
else
eval([foo,' = int']);
end
int
(そして現在foo
) が という名前のフィールドを持つ構造体であると仮定するとbar
、次のように bar を読み取ることができます。
barVal = eval([foo,'.bar']);
これはすべてやや不格好です。
はるかに扱いにくい別のアプローチは、連想配列を使用し、ユーザーが int のさまざまな値を配列に格納できるようにすることです。連想配列に対する Matlab のアプローチはMapsです。それが、この問題に対する私の好ましいアプローチです。上記と同じ変数を使用した例を次に示します。
nameValueMap = containers.Map;
nameValueMap(foo) = int;
上記は、 に保存されている名前foo
と変数のデータとの関連付けを作成しますint
。
データを取得するには、次のことを行うだけです。
intValue = nameValueMap(foo);