MATLAB:我能否以某种方式将函数用作第一个 class 对象?

MATLAB: can I somehow use functions as first class objects?

我有一个用例,我需要根据用户选择的基函数数量来计算变量。例如,如果用户指定 num_basis_funcs = 4:

y = const() + linear(x) + rational1(x) + sin(x)
      1          2            3            4

如果用户指定 num_basis_funcs = 2,则 y 只会计算为:

y = const() + linear(x)
      1          2        

如果用户指定 num_basis_funcs = 1,则 y 只会计算为:

y = const()
      1       

为了举例,我选择了一些简单的基函数;可以这么说,在完整的应用程序中,这些基本功能将由用户定义。

来自 Python,我想到的是制作一个功能列表,我根据用户输入有选择地应用这些功能。从 C++ 的角度来看,想到的是使用函数指针来传递应该执行哪个函数。

一般来说,如何在 MATLAB 中将函数作为 "first class objects" 传递?

您正在寻找 function handles。我建议传递函数句柄的单元格数组并在循环中评估它们,如下所示:

function out = evalFns(x, fnCell)
out = 0;
for iFn = 1:length(fnCell)
    out = out + fnCell{iFn}(x);
end

您可以通过 y = evalFns(x, {@const, @linear, @rational, @sin}) 调用。