我看到了内置函数estimateFundamentalMatrix
,它看起来如下所示
function r = checkOutputClassStrings(list, value)
potentialMatch = validatestring(value, list, ...
'estimateFundamentalMatrix', 'OutputClass');
coder.internal.errorIf(~strcmpi(value, potentialMatch), ...
'vision:estimateFundamentalMatrix:invalidOutputClassString');
r = 1;
我对coder.internal.errorIf
函数感到好奇。我猜想coder
是一个显示函数内部状态的系统对象,但我不清楚。
答案 0 :(得分:4)
coder
是MATLAB Coder产品的一部分。
MATLAB Coder允许您将MATLAB语言的子集转换为C代码-然后可以将C代码随后合并到更广泛的C应用程序中,或通过MEX接口带回到MATLAB中,或交付给嵌入式设备。使用MATLAB Coder时,您会将coder
包中的命令包含在MATLAB代码中-当它们在MATLAB中运行时,它们通常对代码没有影响,但是当转换为C代码时,它们将帮助您控制方式通过添加有助于转换的其他信息(例如,通过控制函数的内联或指定应展开for循环)来转换它。
某些工具箱(包括包含您所引用的代码片段的计算机视觉工具箱)明确支持使用MATLAB Coder从中生成C代码,因为它们确保仅使用MATLAB语言的子集,即可转换为C,并且它们包含coder
命令以帮助优化将其转换为C的过程。
您在此处看到的命令说,将MATLAB代码转换为C时,它应在C代码中包含一个显式检查,以将value
与potentialMatch
进行比较,并退出并返回错误如果不匹配。
(老实说-我不确定为什么要这样做。据我所知,如果代码已经超过validatestrings
语句,那么根据定义,它应该始终通过在随后的语句中进行测试。对我来说似乎有些多余,但也许我忽略了一些细节)。
答案 1 :(得分:2)
我只是在形式化我在评论中给出的答案...
coder.internal.errorIf
恰如其名。这是内部命令,有条件地发出错误。
strcmpi
函数执行不区分大小写的字符串比较,并返回布尔值(真/假)。
波浪号(~
)使对strcmpi
的调用结果无效。
所以您好奇的线在表面上等效于
% Use strcmpi for case insensitive string comparison
if ~strcmpi(value, potentialMatch)
% When using 'error', the string must be specified along with the message identifier.
% The errorIf command was leveraging the in-built 'message' catalog.
% In this case I've lifted the error message from calling the original errorIf command.
error('vision:estimateFundamentalMatrix:invalidOutputClassString', ...
'Expected OutputClass to be ''double'' or ''single''');
end
正如其他答案和评论所指出的,code.internal.errorIf
命令与常见的error
命令具有不同的构造,该命令允许MATLAB优化C代码生成(因此,为什么在{ {1}}包)。
有关特定于编码器的更多详细信息,请参见Sam's answer。