string - 有没有办法将字符串转换为 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 从共享目录复制到运行“旧”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
我鼓励您阅读以下内容:
推荐阅读
- esp32 - esp smartconfig 发生了什么,在 v4.1 中是一团糟?
- python - 如何在 Python 中创建一个有效的函数来填充因子 (t+1)
- bash - 即使在 If 块中,Makefile 也会引发错误
- javascript - if 语句在 for 循环中如何工作?
- python-3.x - 为多个 PDF 运行 Python pgm
- python-3.x - 管理两个不同版本的 Python
- snowflake-cloud-data-platform - 如何在雪花中生成两张表的笛卡尔积?
- java - 如何覆盖使用原始类型的方法?
- python - 以这样一种方式合并列,即具有重复元素的行用逗号分隔
- python-3.x - 为什么 message.channel.send() 在这里不起作用?