有没有办法将字符串转换为 matlab GUI 中的函数调用?

Is there a way a string be converted into a function call inside a matlab GUI?

我试图在另一个 matlab GUI 中调用一个 matlab GUI。此 matlab GUI 具有在 GUI 中可用的字符串名称。我想知道如何将此字符串更改为函数,以便调用它来打开 GUI。

因此我的问题是;如何将字符串转换为函数,以便它可以调用 matlab 中的另一个 GUI?

我正在尝试在 matlab 应用程序设计器中构建 GUI。这个想法是 GUI 启动函数调用一个名为 AutomaticUpdate 的自定义函数。此函数在特定的共享目录中搜索其自身的最新版本。 (例如 GUI_v1_1 查看设置目录中是否存在 GUI_v1_2 或更高版本)。找到后,AutomaticUpdate 函数会将此新版本从共享目录复制到它所在的目录 运行。我现在希望 GUI_v1_1 在复制后自动启动 GUI_v1_2。

将 GUI 从共享目录复制到 'old' GUI 来自 运行 的过程是基于通过转动标题比较 GUI 标题中存在的数字成字符串,然后选择并比较该字符串中的数字。可以通过这种方式选择和复制共享目录中可用的最新版本。我现在有字符串格式的 GUI 标题,但要在 GUI 中打开它,我需要有它的函数格式。复制 GUI 名称后手动将其复制到 GUI 启动函数中(即 GUI_v1_2),然后启动第二个 GUI。复制 GUI 后直接获取字符串并将 str2func 应用于该字符串不会。

这有效(如果刚刚从共享文件夹复制的 GUI 被命名为 TestApp_v1_2):

   function startupFcn(app)
       if haveInet
           fname = AutomaticUpdate2();
       end
   AppTest_v1_2
   end

这不是:

   function startupFcn(app)
       if haveInet
           fname = AutomaticUpdate2();
       end
   str2func(fname)
   end

看到复制的最新文件名为 TestApp_v1_2,fname 包含字符串 'TestApp_v1_2',所以我希望它能工作。我需要它才能工作,因为代码必须独立于刚刚复制的版本的名称。它应该总是打开刚刚复制的最新版本。

使用str2func构建函数句柄(而不是eval

当您在第二个代码片段中说“它不起作用”时,您就错了一半。只是你还没有调用完函数:

str2func(fname)

本身确实没有任何可见的东西。它只创建一个函数的句柄 fname,但由于您调用该行时没有任何输出参数,因此一旦该行执行完毕,创建的句柄就会丢失。

现在如果你尝试:

myNewUpdatedApp = str2func(fname) ;

然后 myNewUpdatedApp 现在 指向 一个可执行函数,但您仍然需要实际调用它才能开始执行。所以要完全完成这项工作,请使用:

myNewUpdatedApp = str2func(fname) ; % create the function handle (pointer to funtion)
myNewUpdatedApp ;                   % call the execution of the function

我鼓励您阅读:

  • str2func(总是优于 eval,文档页面中甚至有一章比较这两个选项)。
  • Function Handles。非常有用的小功能,特别是在像你这样的情况下。