【发布时间】:2014-03-27 15:16:40
【问题描述】:
我要实现的函数需要知道当前版本的 MATLAB 是否至少与R2014a 一样新。
是否有一种可靠且受支持的方法来执行此检查?
(使用“健壮,支持”我的意思是说我对解析版本返回的字符串等脆弱的hack不感兴趣)
顺便说一句,在这种情况下,我想要这个检查的原因是知道我可以使用函数matlab.lang.makeUniqueStrings。如果有一种强大、受支持的方法来检查此函数的可用性,我会使用它而不是测试当前的 MATLAB 是否足够新。不幸的是,似乎没有这样的检查:exist 对我可以为这个函数的名称提出的每个变体返回 false。同样,我可以想到一些脆弱的 hack 来模拟正确的测试(例如 which('matlab.lang.makeUniqueStrings')),但它们并不比我上面提到的版本测试 hack 好。
我发现的最佳解决方案是在 try-catch 块内使用 matlab.lang.makeUniqueStrings 运行命令。这仍然是一个脆弱的 hack,因为 MATLAB 没有提供强大的内置方法来捕获特定异常!
IOW,一切都是为了选择最不可怕的黑客。测试当前版本是否足够新(即使这个测试是一个脆弱的 hack)至少具有足够通用以坚持某些功能的优点,并且至少包含脆弱、hacky 代码的扩散。
【问题讨论】:
-
您能解释一下为什么要考虑解析版本字符串fragile吗?在您看来,最好的解决方案是什么?
-
@RodyOldenhuis:解析这样的字符串涉及对其结构进行假设,TMW 没有承诺支持的假设。因此,依赖于这种假设的代码是脆弱的。相比之下,
verLessThan等方法意味着 TMW 承诺支持特定的版本号测试方式。然后,TMW 有责任确保这种方法继续有效,即使他们决定将来更改其版本字符串的格式。 -
...还有我的第二个问题?
-
你说得非常正确,MathWorks 在保持向后兼容性方面不是很强大,甚至只是在一个地方记录了版本之间的确切变化(你怎么能找到哪个版本引入了一些功能?)。无论如何,最稳健的方法是在 MATLAB R2006a(或您想要支持的任何最旧版本)中编写所有代码,并远离较新的功能/结构。但即便如此,您也必须通过解析版本字符串来检查这个“最低支持版本”(您认为
verLessThan是如何工作的?) -
另一种选择(我经常使用的一种)是不进行任何检查,而只是清楚地记录保证哪个版本继续工作。如果这对您来说是一个可行的选择,则取决于您的目标用户。
标签: matlab