Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
如果我在MATLAB中使用inline函数,则可以创建一个函数名称,该名称可能会根据之前的选择而有所不同:
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等(都带有phi和lambda的值),并且我KavrayskiyVII.m一样将所选函数分配给p我可以多次调用它(使用可变大小的矩阵,并且使用eval可能会导致完全混乱或混乱)。 我有一个变量type ,它将是所需功能的名称之一(例如'Mercator' , 'KavrayskiyVII'等)。我想我需要使p成为指向type变量内部命名函数的指针。有什么想法可以做到吗? 回答: 选项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 正如安德鲁指出的那样,这避免了str2func的限制以及与switch语句相关的额外维护。 更多&回答... |
![]() |
![]() |