それぞれ異なるサービス関数を使用して、MATLAB と Freemat の両方で実行する必要があるコードがいくつかあります。全体を移植可能にするには、現在の環境に応じて、コードの開始時に呼び出す関数を決定する方法を見つける必要があります。
どうやってそれを行うのですか?
versionコマンドを使用することを考えていましたが、これが本当に堅牢かどうかはわかりません。
それぞれ異なるサービス関数を使用して、MATLAB と Freemat の両方で実行する必要があるコードがいくつかあります。全体を移植可能にするには、現在の環境に応じて、コードの開始時に呼び出す関数を決定する方法を見つける必要があります。
どうやってそれを行うのですか?
versionコマンドを使用することを考えていましたが、これが本当に堅牢かどうかはわかりません。
\verstring
のコンテキストで使用すると、matlab の出力はエラーになりますが、Freemat では「freemat 4.0」のようなものになります。次に例を示します。try
catch
try
txt=verstring;
output='Freemat';
catch err
output='Matlab';
end
それぞれを特定しようとし、不明な場合はエラーを出すか、そのような場合はユーザーに手動で特定するように依頼します。
% try to identify if it is freeMat
isDefinatelyFreeMat = false;
try
versionIdentifier=verstring;
if (strcmpi(versionIdentifier(1:7), 'FreeMat'))
isDefinatelyFreeMat = true;
end
catch e
end
% try to identify if it is Matlab
isDefinatelyMatlab = false;
try
versionIdentifier=ver;
if (strcmpi(versionIdentifier.Name, 'Matlab'))
isDefinatelyMatlab = true;
end
catch e
end
% if identification was not successful
if ((isDefinatelyFreeMat && isDefinatelyMatlab) || (~isDefinatelyFreeMat && ~isDefinatelyMatlab))
error('Was unable to identify software.');
% TODO: Ask user to identify software manually
end