我有一些代码需要在MATLAB和Freemat中运行,在每种情况下都使用不同的服务函数。为了使整个程序具有可移植性,我需要找到一种方法来确定在代码开始时调用哪些函数,这取决于我所处的环境。
一个人是怎么做到的?
我正在考虑使用version命令,但不太确定这是否真的健壮。
发布于 2013-11-19 21:35:15
使用verstring在try \ catch的上下文中,matlab中的输出将是一个错误,而在Freemat中,输出将类似于“freemat4.0”,例如:
try
txt=verstring;
output='Freemat';
catch err
output='Matlab';
end发布于 2013-11-20 08:00:09
如果不确定,我会尝试识别每一个,并给出一个错误,或者在这种情况下请用户手动识别:
% 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
endhttps://stackoverflow.com/questions/20069880
复制相似问题