例: クロージャを使用した関数のカリー化
以下は、クロージャーを使用してカリー化を実装するコード例です。
package main
import "fmt"
// add 函数是一个普通的函数,接收两个参数并返回它们的和
func add(a, b int) int {
return a + b
}
// curryAdd 函数是一个闭包,用于实现柯里化
func curryAdd(a int) func(int) int {
// 在闭包内部定义一个匿名函数,接收一个参数并返回两个参数的和
return func(b int) int {
return add(a, b)
}
}
func main() {
使用柯里化函数创建新的函数
//add5 := curryAdd(5)
//
调用新函数,传入参数并获取结果
//result := add5(10)
result :=curryAdd(5)(10)
fmt.Println(result) // 输出 15
}
上記のコードでは、add
function は 2 つの引数を受け取り、それらの合計を返す通常の関数です。
curryAdd
関数は、匿名関数を返すクロージャです。この無名関数は引数を受け取り、その引数をcurryAdd
関数、結果を返します。
main
functionでは、curryAdd(5)
新しい関数を作成するために呼び出しますadd5
。add5
関数は によってcurryAdd(5)
返される、5
最初の引数としてadd
関数ます。次に、第 2 引数としてadd5(10)
渡される関数を呼び出し、結果を取得します。10
add
クロージャを使用してカリー化を実装すると、事前に関数のパラメータを部分的に適用して新しい関数を生成し、残りのパラメータを渡すだけで済むため、コードがより柔軟で再利用可能になります。