JP.*_*JP. 9 string matlab function-pointers function-handle
如果我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);
Run Code Online (Sandbox Code Playgroud)
但是我正在创建的内联函数变得非常史诗,所以我想将它们更改为其他类型的函数(即m文件,子函数或嵌套函数).
假设我有m个文件,比如Mercator.m
,KavrayskiyVII.m
等等(都取值phi
和lambda
),我想以p
与上面相同的方式分配所选择的函数,以便我可以调用它多次(带可变大小的矩阵和使用eval
不可能或完全混乱的东西.
我有一个变量,type
,那将是所需要的功能(例如该名称中的一个'Mercator'
,'KavrayskiyVII'
等等).我想我需要p
进入一个指向type
变量内部命名函数的指针.我有什么想法可以做到这一点?
gno*_*ice 19
使用该str2func
函数(假设字符串type
输入与函数名称相同):
p = str2func(type); % Create function handle using function name
c = p(phi, lambda); % Invoke function handle
Run Code Online (Sandbox Code Playgroud)
注意:文档提到了这些限制:
使用创建的函数句柄
str2func
无法访问其本地工作空间之外的变量或嵌套函数.如果函数句柄包含这些变量或函数,则在调用句柄时MATLAB®会引发错误.
switch type
case 'Mercator'
p = @Mercator;
case 'KavrayskiyVII'
p = @KavrayskiyVII;
... % Add other cases as needed
end
c = p(phi, lambda); % Invoke function handle
Run Code Online (Sandbox Code Playgroud)
使用EVAL和函数句柄(Andrew Janke建议):
p = eval(['@' type]); % Concatenate string name with '@' and evaluate
c = p(phi, lambda); % Invoke function handle
Run Code Online (Sandbox Code Playgroud)
正如Andrew指出的那样,这避免了str2func
与switch语句相关的限制和额外维护.
归档时间: |
|
查看次数: |
9891 次 |
最近记录: |