【发布时间】:2018-03-25 07:34:45
【问题描述】:
我出现了以下代码:
public static class FuncUtils
{
public static Func<T1, T3> Compose<T1, T2, T3> (Func<T1, T2> f1, Func<T2, T3> f2)
{
return a => f2(f1(a));
}
}
对我来说最大的谜团是这个
返回 a => f2(f1(a));
你能解释一下它是如何工作的吗?
【问题讨论】:
-
它返回一个接受 a 并返回 f2(f1(a)) 的函数。
-
这将返回一个新函数,该函数接收参数
a,其主体为f2(f1(a))。当调用该函数时,它将在 a 上调用f1,然后在该结果上调用f2。这就是该方法被称为Compose的原因。它需要两个函数f1, f2并返回第三个函数,它在f2的结果上调用f1 -
这是一个 lambda 表达式。
-
我想说有人试图在 F# 中复制 ` >> ` 运算符,它允许您编写
(f1 >> f2)(a) -
例如:假设你有一个
Func<int, int> add5 = i => i + 5;和一个Func<int, int> doubleIt = i => i * 2;然后FuncUtils.Compose(add5, doubleIt)会给你一个函数f加5然后乘以2,所以f(3) = 16跨度>
标签: c# .net functional-programming func