有条件地使用 coder.extrinsics

Posted

技术标签:

【中文标题】有条件地使用 coder.extrinsics【英文标题】:Using coder.extrinsics conditionally 【发布时间】:2015-06-15 15:43:19 【问题描述】:

这个问题指的是 Matlab coder 外在功能。像fprintf 这样的一些函数在较旧的 Matlab 版本中是外在的,而在较新的版本中不是外在的。有没有办法支持多个Matlab版本,如果coder.extrinsics只允许在顶层,并且不能放在if语句下?

【问题讨论】:

【参考方案1】:

您不能有条件地直接将某些函数设为外部函数。一种方法是使用两个不同的函数,例如 fprintf_old 和 fprintf_new。 fprintf_old 将具有 coder.extrinsic 声明,然后调用 fprintf。 fprintf_new 可以在没有外部声明的情况下调用 fprintf。现在,您可以通过在编译期间使用恒定条件检查您的版本来在两个调用之间进行选择。例如,

if coder.const(isOlderVersion())
  fprintf_old();
else
  fprintf_new();
end

【讨论】:

【参考方案2】:

在代码生成中,feval constructs an extrinsic call 指向第一个参数中命名的函数。由于您可以在控制流中嵌入对feval 的调用,因此可以使用它来选择性地从外部调用函数并将代码保存在单个源文件中:

if isOlderVersion()
  % Call fprintf extrinsically
  feval('fprintf');
else
  fprintf();
end

【讨论】:

以上是关于有条件地使用 coder.extrinsics的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSF Datatable 有条件地显示行

如何使用条件三元运算符在 lambda 之间有条件地分配 Func<>?

如何有条件地调用 useQuery 钩子?

如何使用 clsx 有条件地渲染 css?

使用关键字“使用”有条件地导入类

如何通过 map 函数有条件地使用 React 和 Firebase 渲染元素?