F# 提供了一个功能,一个函数可以返回另一个函数。
在 F# 中生成函数的一个例子是:
let powerFunctionGenarator baseNumber = (fun exponent -> baseNumber ** exponent);
let powerOfTwo = powerFunctionGenarator 2.0;
let powerOfThree = powerFunctionGenarator 3.0;
let power2 = powerOfTwo 10.0;
let power3 = powerOfThree 10.0;
printfn "%f" power2;
printfn "%f" power3;
我想出的在 C# 中实现相同目的的最佳方法是:
class Program
{
delegate double PowerOf2(double exponent);
delegate double PowerOf3(double exponent);
delegate double PowerOfN(double n, double exponent);
static void Main(string[] args)
{
PowerOfN powerOfN = (a, b) => { return Math.Pow(a,b) ; };
PowerOf2 powerOf2 = (a) => { return powerOfN(2, a); };
PowerOf3 powerOf3 = (a) => { return powerOfN(3, a); };
double result = powerOf2(10);
Console.WriteLine(result);
result = powerOf3(10);
Console.WriteLine(result);
}
}
还有其他方法(/更好的方法)吗?
最佳答案
当然,这在 C# 中很简单:
using System;
class P
{
static void Main()
{
Func<double, Func<double, double>> powerFunctionGenerator =
baseNumber => exponent => Math.Pow(baseNumber, exponent);
Func<double, double> powerOfTwo = powerFunctionGenerator(2.0);
Func<double, double> powerOfThree = powerFunctionGenerator(3.0);
double power2 = powerOfTwo(10.0);
double power3 = powerOfThree(10.0);
Console.WriteLine(power2);
Console.WriteLine(power3);
}
}
简单易行。如果您不喜欢 list 类型,其中大部分可以替换为 var
。
关于c# - 在 C# 中生成函数的最佳生成函数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8983485/