を使用してはいけないことはわかっていますeval。すべての明白な理由 (パフォーマンス、保守性など) のためです。私の質問はもっと脇にあります – それには正当な用途がありますか? 別の方法でコードを実装するのではなく、どこで使用する必要があるか。
いくつかの言語で実装されており、プログラミング スタイルが悪い可能性があるため、まだ利用できる理由があると思います。
まず、Mathwork の eval の代替リストを次に示します。
また、mCode インタープリターをビルドするためにコンパイル済みアプリケーションで賢く使用することもできeval()ますが、Matlab コンパイラーは明らかな理由でそれを許可しません。
MATLAB では、eval関数が関数を介して入力引数の名前を使用する場合に関数が役立ちinputnameます。たとえば、display(入力引数の名前に依存する) 組み込み関数をオーバーロードするには、eval関数が必要です。たとえばdisplay、オーバーロードされたものから組み込みを呼び出すには、次のdisplayようにします。
function display(X)
eval([inputname(1), ' = X;']);
eval(['builtin(''display'', ', inputname(1), ');']);
end
MATLAB には もありevalcます。ドキュメントから:
T = evalc(S) は EVAL(S) と同じですが、エラー メッセージを除き、通常はコマンド ウィンドウに書き込まれるものはすべてキャプチャされ、文字配列 T に返されます (T の行は '\ で区切られます) n' 文字)。
それでもこれを考慮するevalと、コマンド ウィンドウに有用な情報を表示するクローズド ソース コードを処理するときに非常に強力であり、その出力をキャプチャして解析する必要があります。