【发布时间】:2018-02-25 20:40:15
【问题描述】:
我正在尝试以编程方式生成lambda。这是一个例子:
这是我需要生成的矩阵:
m = [[a(t), b(t)],
[c(t), d(t)]]
这是一个时间相关矩阵。如果a、b、c、d 函数始终相同,我将创建一个像这样的 lambda:
m = lambda{|t| [[a(t), b(t)], [c(t), d(t)]]}
并调用它:
m.call(x)
这些功能并不完全通用,但它们只能来自有限的列表。问题是我不知道在我执行一些计算之前,从这个列表中,函数将是哪些。例如,就我而言,我只有三个可能的函数,所以 lambda 可能是:
m = lambda{|t| [[f1(t), f2(t)], [f2(t), f3(t)]]}
或
m = lambda{|t| [[f3(t), f3(t)], [f1(t), f2(t)]]}
或这三个功能的任何其他组合。
有没有办法以编程方式定义lambdas?这是最好的方法吗?
在实际代码中,这个矩阵可能非常大,很容易有 500x10,000 (500,000) 个元素。它是在第一个循环中计算的。之后循环遍历t 值。对于每个t,功能当然不会改变。
此外,这些函数是简单的数学表达式,如幂、exp 等......
【问题讨论】:
-
这些是
f1、f2、...方法还是函数(即其他lambda)? -
是的,完全可以,您可以使用高阶函数或 lambda:
->(arg) { -> { arg } }.call(1).call == 1 -
@SebastianPalma 够公平的。我已经改写了。希望它现在更有意义。
标签: ruby lambda metaprogramming