4

我在 OS X 上使用MATLAB Engine C 接口。我注意到如果engEvalString()给出了不完整的 MATLAB 输入,例如

engEvalString(ep, "x=[1 2");

或者

engEvalString(ep, "for i=1:10");

那么这个函数就永远不会返回。最快的测试方法是使用engdemo.c示例,该示例将提示输入一段 MATLAB 代码并对其进行评估(即您可以键入任何内容)。

我的应用程序允许用户输入任意 MATLAB 输入并对其进行评估,因此我无法轻松防止输入不完整。有解决方法吗?有没有办法防止engEvalString()在这种情况下挂起,或者有没有办法在我实际将它传递给 MATLAB 之前检查任意一段代码的正确性/完整性?

4

2 回答 2

1

正如您所指出的,这个错误似乎特定于 Mac 和/或 Linux(我无法在我的 Windows 机器上重现它)。作为一种解决方法,将调用包装在evalevalc或中evalin

engEvalString(ep, "eval('x = [1,2')")

此外,这些函数的一个未记录的特性是它们接受第二个输入,以防第一个输入发生错误。例如:

ERR_FLAG = false;
eval('x = [1,2', 'x=nan; ERR_FLAG=true;')

您可以通过查询全局错误标志的值来捕获错误,并且仍然可以避免上述错误......

于 2013-02-19T16:08:12.120 回答
0

支持确认这是 OS X 上的 MATLAB 引擎界面中的一个错误(它在 Windows 中不存在)。可以使用 MATLAB 函数 、 或类似函数来解决eval问题evalc。与其直接将代码传递给engEvalString(),不如先将其包装在这些中。

于 2013-02-17T21:10:18.260 回答