我是C#的新手.
我想做的事情似乎令人费解.让我们首先说我想要处理一些函数,以便稍后执行它们.我知道我可以通过以下方式实现这一目标:
List<Action> list = new List<Action>();
list.Add( () => instanceA.MethodX(paramM) );
list.Add( () => instanceA.MethodY(paramN, ...) );
for(Action a in list) {
a();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果instanceA对象尚不存在,但我知道当我调用相应的函数时它会存在怎么办?MethodX和MethodY在我不应该修改的外部库上.
- 为什么:想想这种情况:A类有100个方法,每个方法根据A类状态返回不同的浮点数.但是,根据其他一些状态,我们可能只想访问前5个方法,或者只访问第一个和第四个方法.此方法适用的类状态可能会随时间而变化.我的想法是拥有一个包含所有100种方法的大型列表,然后使用与该方法相对应的索引,使用适当的方法创建子列表LL(例如,[1,2,3,4,5]或[ 1,4]).然后,一旦创建了对象A,我将依次运行子列表LL中的所有不同方法,不知何故它们被对象A调用.
有关如何实现这一点的任何想法?
我的问题:给定一个函数句柄,matlab是否每次需要对其进行求值时解析字符串,或者只调用一次然后缓存它?
例
考虑一下巧妙的功能
function [] = foo(func)
for j=1:1e4
func(j);
end
Run Code Online (Sandbox Code Playgroud)
和脚本
func1 = @(x) 5*abs(x)^2
function foo(func1);
Run Code Online (Sandbox Code Playgroud)
在运行时,Matlab需要将其解释@(x) 5*abs(x)^2为函数.在这个例子中,它是一次还是一千次?
我正在做另一个课程,这次是空中机器人.我必须使用matlab ode45(普通差异方程)编程pd控制器.并且必须包含此代码的文件调用如下:
pd_controller(~, s, s_des, params)
Run Code Online (Sandbox Code Playgroud)
我四处搜索,但找不到向我解释这个问题以及它是如何工作的.
在主程序中,使用时间变量调用函数,我需要为我的ODE:
controlhandle(t, s, s_des, params)
Run Code Online (Sandbox Code Playgroud)
此控制句柄是pd_controller的函数处理程序.
那么这是什么意思?我可以访问背后的内容~吗?
此外:我找到了一个例子,但另一个例子.一个函数,让我们调用它function = f(a,b),f(~, b)在函数中声明了where a和bhas.
我有像Matlab这样的函数句柄
fhandle = @(A) max(1-2*A,0).*(2*A.^5+2*A + 1)
A通常在哪里是矩阵.我执行了这么多次,它正在减慢计算速度.可以将它保存为函数句柄(所以我不必重写代码)但是要2*A一劳永逸地计算然后再应用它三次?
提前致谢.