如果papply返回的函数小于输入函数,是否有类似的FP操作返回一个函数,该函数返回一个值而不管输入函数的值是多少?如果是这样,是否有C#等价物?
考虑一个C#函数返回要转换为表达式的void
,并且通过编写像(args) => f(args); return null;
这样的匿名函数包装来完成这么多次。
在C#中,
public Func<T1, T2, ..., T8, TResult> WhatIsMyName<T1, T2, ..., T8, TResult> (Action<T1, T2, ..., T8> action, TResult value = default(TResult))
{
return (t) => { action(t); return value; }
}
您最好称之为FP.WhatIsMyName(voidfunc)
,因此可以避免投射。
在Clojure中,
(defn whatismyname? [f x]
(f)
x)
答案 0 :(得分:2)
在函数式编程中,您可能使用函数组合来扩充或修改结果。对于您的示例,您只需使用常量函数组合现有函数,例如给定f
:
val f' = const 0 o f
其中o
是函数组合(如数学中),const 0
创建一个常量函数,总是返回0(对于任何参数)。这些是标准组合器,您可以定义如下:
fun (g o f) x = g (f x)
fun const x y = x
答案 1 :(得分:1)
您可以编写一个为您创建匿名函数的方法。
public Action<T> Ignore<T,TResult>(Func<T,TResult> func)
{
return (args) => { func(args); return; }
}
虽然您的代码在技术上返回了args,但格式如下。
public Func<T,T> Ignore<T,TResult>(Func<T,TResult> func)
{
return (args) => { func(args); return args; }
}
在任何一种情况下,您都可以将其传递给另一种方法,例如Method(Ignore(DoSomething));
,或者您可以像Ignore(DoSomething)(1);
一样自己调用它。