- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
由于 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/
测试返回类型为 bool 的方法时。 你应该: expected = true; Assert.AreEqual(expected, actual); 或 Assert.IsTrue(actual);
我最近在编写新的 NUnit 测试时尝试使用 Assert.Equals() 方法。执行此方法时会抛出一个 AssertionException ,说明Assert.Equals 不应该用于断言。 乍
在 Chai 断言库中,当我们已经有了“assert.deepEqual()”时,“assert.equal()”有什么用"和 "assert.strictEqual()"用于严格和深度相等断言?还提
有没有办法断言 puppet 中的变量(或更具体地说,事实)具有特定值,如果没有则中止安装? 对于背景,情况如下: 在大多数情况下,我可以引用主机名,但有时我需要使用 IP 地址。例如,我们的日志收集
喜欢什么: Assert.That(obj.Foo, Is.EqualTo(true)) 或 Assert.True(obj.Foo) 对我来说,这两个断言是等价的,那么应该首选哪个? 最佳答案 在这
如何在 xUnit 中找到多个断言或软断言?我发现 Nunit 有以下能力,试图在 xUnit 中找到类似的选项。 Assert.Multiple(() => { Assert.AreEqua
有什么区别: Assert.Equals和 Assert.AreEqual Assert.NotNull和 Assert.IsNotNull ... ? 最佳答案 Assert.Equals 是一个对
我想写一个像这样工作的断言函数: //the following expression outputs "assertion failed" to std::err and then terminat
有人可以指出差异吗? 以上确实是我的问题,但是如果您也可以与他们分享您的经验以及您为什么使用其中一个。 最佳答案 它们只是两个不同的库,因此只需查看功能,尤其是报告功能,然后选择即可。 因为我是 的作
我无法找到断言 1 失败但断言 2 通过的原因: var a = Test.test1; var b = Test.test1; a.Should().BeSameAs(b); //1 Assert.
我正在为每个步骤使用 NUnit 断言运行自动化 BDD 步骤,即 Then And 我的 UI 测试。 NUnit 断言仅限于每个方法。这意味着如果方法中的断言失败,则不会运行其他步骤。 我正在考虑
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我只是在寻找一些示例,说明何时适合使用 Assert.Catch 或 Assert.Throws 断言单元测试中抛出的任何异常。我知道我也可以使用 ExpectedException,但我特别想知道“
Assert.AreEqual 和 Assert.AreSame 有什么区别? 最佳答案 这意味着 AreSame() 检查它们是否是完全相同的对象 - 如果引用指示内存中的相同对象。 AreEqua
在C#中,有什么区别 Assert.AreNotEqual 和 Assert.AreNotSame 最佳答案 这里给出的几乎所有答案都是正确的,但可能值得举个例子: public static str
我曾经在 NUnit 中使用过它们,它们非常有用。知道如何做类似的事情吗? 编辑,代码示例: bool condition = false;//would be nice not to have th
关于Arrange-Act-Assert的经典测试模式,我经常发现自己在 Act 之前添加了反断言。这样我就知道传递的断言确实是作为操作的结果传递的。 我认为它类似于红绿重构中的红色,只有当我在测试过
每当我创建断言时,Eclipse 都会建议我从这两个包之一导入它。 例如,当我尝试使用 assertArrayEquals() 比较数组时Eclipse 建议从其中之一导入它 org.junit.As
每当我创建断言时,Eclipse 都会建议我从这两个包之一导入它。 例如,当我尝试使用 assertArrayEquals() 比较数组时Eclipse 建议从其中之一导入它 org.junit.As
我是一名优秀的程序员,十分优秀!