![]() |
1
18
Currying用于将具有x参数的函数转换为具有y参数的函数,因此可以将其传递给需要具有y参数函数的另一个函数。
例如,
你可以用咖喱来“储存”
这里的问题是,还有匿名代表,这使得讨好变得多余。事实上,匿名代表 是 一种咖喱。
甚至只是
Currying是一种解决特定问题的方法,考虑到某些函数式语言的语法。使用匿名委托和lambda运算符,语法如下。NET要简单得多。 |
![]() |
2
12
首先考虑fn(x,y,z)更容易。这可以通过使用fn(x,y)进行curried,给你一个只接受一个参数z的函数。任何需要单独使用x和y完成的事情都可以通过返回的函数所持有的闭包来完成和存储。 现在,您可以使用z的各种值多次调用返回的函数,而无需重新计算所需的x和y部分。 编辑: 实际上,咖喱有两个原因。 参数缩减正如Cameron所说,将一个需要2个参数的函数转换为一个只需要1个的函数。使用参数调用此curried函数的结果与使用2个参数调用原始函数的结果相同。
由于C#中存在Lambdas,这具有有限的价值,因为无论如何这些都可以提供这种效果。虽然你使用的是C#2,但你问题中的Curry函数具有更大的价值。
分期计算咖喱的另一个原因正如我之前所说。当向curried函数提供最终参数时,允许复杂/昂贵的操作分阶段进行并多次重复使用。 这种类型的curry在C#中是不可能的,它确实需要一种函数式语言来实现它的任何函数。 结论通过你提到的Curry进行参数缩减在C#2中很有用,但在C#3中由于Lambdas而大大降低了值。 |
![]() |
3
0
从一个线程 codingforums 我特别喜欢这个问题的解释和篇幅 page . |
![]() |
4
0
一个例子:你有一个函数
详细信息:。NET委托使用隐式currying。类的每个非静态成员函数都有一个隐式
在C++中,boost::bind等用于相同的目的。和往常一样,在C++中,一切都更加显式(例如,如果你想将实例成员函数作为回调传递,你需要显式绑定
|
![]() |
5
0
我有一个愚蠢的例子: 不整洁版本:
咖喱功能:
用途:
玩得开心 |
![]() |
6
-1
这是另一个如何使用Curry函数的例子。根据某些条件(例如一周中的某一天),您可以在更新文件之前决定应用什么存档策略。
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 7 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 7 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 8 月前 |