我想要实现的函数需要知道当前版本的MATLAB是否至少与最近一样R2014a
.
是否有一种强大的,受支持的方式来执行此检查?
("强大,支持"我的意思是说我对脆弱的黑客不感兴趣,例如解析版本返回的字符串等)
BTW,在这种情况下,我想要这个检查的原因是知道我可以使用该功能matlab.lang.makeUniqueStrings
.如果有一种强大的,受支持的方式来检查此函数的可用性,我会使用它而不是测试当前的MATLAB是否足够新.不幸的是,似乎没有这样的检查:exist
对每个变量返回false我可以为此函数的名称提出.再一次,我可以想到脆弱的黑客来模仿正确的测试(例如which('matlab.lang.makeUniqueStrings')
),但它们并不比我上面提到的版本测试黑客好.
我发现的最佳解决方案是matlab.lang.makeUniqueStrings
在try-catch
块内运行命令.这仍然是一个脆弱的黑客,因为MATLAB
它没有提供强大的内置方式来捕获特定的异常!
IOW,这就是选择最糟糕的黑客.测试当前版本是否足够新(即使这个测试是一个脆弱的黑客)至少具有足够通用的优点,以坚持某些功能,并至少包含脆弱,hacky代码的扩散.
gno*_*ice 17
我会用这个verLessThan
函数:
verLessThan('matlab', '8.3')
Run Code Online (Sandbox Code Playgroud)
如果您使用的当前版本早于8.3(R2014a),则返回true(1),否则返回false(0).不需要字符串解析.
然后你可以像这样使用它:
if ~verLessThan('matlab', '8.3')
% Run code using matlab.lang.makeUniqueStrings
end
Run Code Online (Sandbox Code Playgroud)
如果您只需要关心相当新版本,请使用该verLessThan
命令.但是,verLessThan
大约在2006a左右推出; 如果您需要支持早于此版本的版本,则需要使用该version
命令的输出.
或者,您可以稳健地测试是否存在matlab.lang.makeUniqueStrings
.首先,用于m = meta.package.fromName('matlab.lang')
检索meta.package
引用包的对象.如果m
为空,则包不存在.假设m
不为空,请检查FunctionList
属性m
以查看是否makeUniqueStrings
存在.(还有一处ClassList
房产).
最后,MATLAB确实提供了一种捕获特定异常的方法.而不是简单catch
,使用catch myError
.变量myError
将是一个类型的对象MException
,在catch
块中可用.您可以测试identifier
和message
异常的性质,并妥善处理不同的异常,包括重新抛出未处理的.