gpt4 book ai didi

matlab - 何时在 Matlab 中使用 assert()?

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:24 24 4
gpt4 key购买 nike

由于 Matlab 是解释型的,通常会在函数开头花费大量时间来强制执行函数签名。例如

if nargin ~= 2; error('must provide two input args a and b'); end
if a < 0||a ~=floor(a); error('input arg1 must be positive non-zero integer'); end
if ~isa(b,'cell') ...

是不是用Matlab的assert()比较好为此呢?如果不是,什么时候在 Matlab 中使用 assert() 是合适的?

关于在生产代码中使用 assert 的讨论很热烈 here但我不确定这是否适用于解释代码。同样,另一个很好的讨论 here我同意@Dan Dyer 关于断言表达对当前状态的信念。然而,查看针对 Python 的类似讨论 here人们说,只在不应该发生的情况下使用断言(比如异常(exception)情况的异常(exception)),这有点矛盾 w.r.t.以前的引用资料。

也许这更多的是关于断言在解释性语言中扮演的角色的问题,而不是关于 Matlab 的问题。

最佳答案

在大多数情况下,两者之间没有区别

assert(X,...)

if (~X)
error(...)
end

您在它们之间的选择是方便或风格的问题。

基于 MATLAB 的项目中非生产代码和生产代码之间的区别通常与基于其他语言的项目中的区别不同。

部分原因是,正如您所说,MATLAB 通常是解释型而非编译型;尽管可以使用 MATLAB Compiler 或 Builder 产品生成应用程序,但这些应用程序虽然未严格“编译”,但没有可见的源代码且无法调试。对于这类应用程序,您需要像处理编译语言一样小心处理异常和错误。

部分原因还在于“生产”对于使用 MATLAB 的项目与使用其他语言的项目而言通常意味着不同的东西;例如,这可能意味着 MATLAB 代码自动转换为 C 以部署到汽车发动机 Controller ,或者它可能意味着某些 MATLAB 代码正在运行财务预测模型并将结果写入生产数据库。

有一种特殊情况,应该使用 assert 而不是 if..error..end,即当您使用 MATLAB Coder 生成 C 代码时来自 MATLAB 代码。 MATLAB Coder 检查 MATLAB 代码中的 assert 语句以推断它需要转换为 C 的变量的属性,并且如果它可以假设有关您断言的变量的事实(例如数组大小和类型)。

最后一点:对于您提到的特定事件,强制执行函数签名,我不会使用这两种方法 - inputParser 通常更健壮和一致(虽然有点冗长),但更重要的是它鼓励您首先设计好函数签名。

关于matlab - 何时在 Matlab 中使用 assert()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27159708/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com