如何测试最近足够的MATLAB版本?

kjo*_*kjo 9 matlab

我想要实现的函数需要知道当前版本的MATLAB是否至少与最近一样R2014a.

是否有一种强大的,受支持的方式来执行此检查?

("强大,支持"我的意思是说我对脆弱的黑客不感兴趣,例如解析版本返回的字符串等)


BTW,在这种情况下,我想要这个检查的原因是知道我可以使用该功能matlab.lang.makeUniqueStrings.如果有一种强大的,受支持的方式来检查此函数的可用性,我会使用它而不是测试当前的MATLAB是否足够新.不幸的是,似乎没有这样的检查:exist对每个变量返回false我可以为此函数的名称提出.再一次,我可以想到脆弱的黑客来模仿正确的测试(例如which('matlab.lang.makeUniqueStrings')),但它们并不比我上面提到的版本测试黑客好.

我发现的最佳解决方案是matlab.lang.makeUniqueStringstry-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)


Sam*_*rts 8

如果您只需要关心相当新版本,请使用该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块中可用.您可以测试identifiermessage异常的性质,并妥善处理不同的异常,包括重新抛出未处理的.