以这种方式将两个数字相加的惯用方法是什么Add(5)(3)
→这是在c#中完成的委托,但我不确定在Go中正确的方法是什么,因为没有delegate
。
返回一个函数,该函数从封闭作用域中获取第一个值,从参数中获取第二个值。
func Add(a int) func(int) int {
return func(b int) int {
return a + b
}
}
fmt.Println(Add(3)(5)) // prints 8
这些都不是习惯用语。习惯代码是3 + 5
。
在Go中这样做的习惯方法是不这样做。
Go对性能和过程性的强调意味着像curry这样的函数式模式是强烈的反惯用的。在Go中,两个数字相加的唯一习惯方法是:sum := 5 + 3
可以用返回函数
的函数来实现它func Add(val int) func(int) int {
return func (other int) int {
return val + other
}
}
但是你不应该。它增加了复杂性,降低了程序的速度,没有任何好处。