「eval」を使わずにパッケージ修飾された Simulink クラスを生成するにはどうすればよいですか。

実行時に決まるクラス名を使ってオブジェクトを生成したいのですが、対象のクラスは Simulink 関連の名前空間のようなパッケージ配下にあります。現在は完全修飾クラス名を文字列として組み立て、eval を使ってコンストラクターを呼び出しています。
以下に一般化された例を示します。
function obj = createObject(packageName, className)
qualifiedName = sprintf('%s.%s', packageName, className);
obj = eval(sprintf('%s()', qualifiedName));
end
obj = createObject('Simulink', 'Parameter');
動的にパッケージ修飾されたオブジェクトを生成する際に、eval を使わない方法を知りたいです。

 Accepted Answer

MathWorks Support Team
MathWorks Support Team about 7 hours ago
一般的な代替手段として、str2func を使って完全修飾クラス名をコンストラクターの関数ハンドルに変換し、そのハンドルを直接呼び出す方法があります。
function obj = createObject(packageName, className)
qualifiedName = sprintf('%s.%s', packageName, className);
constructorHandle = str2func(qualifiedName);
obj = constructorHandle();
end
使用例:
obj = createObject('Simulink', 'Parameter');
このアプローチでは、「eval」を直接使わないことで、動的な変数生成に対してパフォーマンス向上が狙えます。MATLABのドキュメントでも、実行時にテキストから動作を選択する必要がある場合の標準的な代替手段として「str2func」を記述しています。

More Answers (0)

Categories

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!