当前位置:  开发笔记 > 编程语言 > 正文

如何从MATLAB中的字符串输入创建函数指针?

如何解决《如何从MATLAB中的字符串输入创建函数指针?》经验,为你挑选了1个好方法。

如果我inline在MATLAB中使用该函数,我可以创建一个单独的函数名称,可以根据以前的选择做出不同的响应:

if (someCondition)
  p = inline('a - b','a','b');
else
  p = inline('a + b','a','b');
end

c = p(1,2);
d = p(3,4);

但是我正在创建的内联函数变得非常史诗,所以我想将它们更改为其他类型的函数(即m文件,子函数或嵌套函数).

假设我有m个文件,比如Mercator.m,KavrayskiyVII.m等等(都取值philambda),我想以p与上面相同的方式分配所选择的函数,以便我可以调用它多次(带可变大小的矩阵和使用eval不可能或完全混乱的东西.

我有一个变量,type,那将是所需要的功能(例如该名称中的一个'Mercator','KavrayskiyVII'等等).我想我需要p进入一个指向type变量内部命名函数的指针.我有什么想法可以做到这一点?



1> gnovice..:

选项1:

使用该str2func函数(假设字符串type输入与函数名称相同):

p = str2func(type);  % Create function handle using function name
c = p(phi, lambda);  % Invoke function handle

注意:文档提到了这些限制:

使用创建的函数句柄str2func无法访问其本地工作空间之外的变量或嵌套函数.如果函数句柄包含这些变量或函数,则在调用句柄时MATLAB®会引发错误.

选项#2:

使用SWITCH语句和函数句柄:

switch type
  case 'Mercator'
    p = @Mercator;
  case 'KavrayskiyVII'
    p = @KavrayskiyVII;
  ...                    % Add other cases as needed
end
c = p(phi, lambda);      % Invoke function handle

选项#3:

使用EVAL和函数句柄(Andrew Janke建议):

p = eval(['@' type]);  % Concatenate string name with '@' and evaluate
c = p(phi, lambda);    % Invoke function handle

正如Andrew指出的那样,这避免了str2func与switch语句相关的限制和额外维护.


如何选择3:动态函数句柄构造函数:"p = eval(['@'type])".在没有手动维护的switch语句的情况下避免str2func限制.
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有