func addTwoNumbers(a: Int)(b: Int) -> Int { return a + b}addTwoNumbers(4)(b: 6) // Result: 10var add4 = addTwoNumbers(4)add4(b: 10) // returns 14@H_404_2@这种函数的返回类型是什么?如何使用采用Variadic参数的函数生成这样的函数.
func generateCurry(.../*Variadic parameters*/) -> .../*curry function type*/ { return ...//curry function}@H_404_2@我想要一个通用的解决方案,而不是只将Int作为参数在generateCurry函数的参数中
let currIEd = curry(func(a,b,c) { print(a + b + c)})currIEd(1)(2)(3) //prints 6@H_404_2@ 你可以通过闭包轻松实现这一目标:/// Takes a binary function and returns a currIEd versionfunc curry<A,B,C>(f: (A,B) -> C) -> A -> B -> C { return { a in { b in f(a,b) } }}curry(+)(5)(6) // => 11let add: Int -> Int -> Int = curry(+)add(5)(6) // => 11@H_404_2@如果能够为需要3,4个或更多参数的函数执行相同的 *** 作,但不重复实现,那将是非常好的.这样一个函数的签名可能会开始:
/// Take a function accepting N arguments and return a currIEd versionfunc curry<T>(args: T...) -> /* ? */@H_404_2@返回类型是什么?它会根据函数的输入而改变.这在目前Swift中是不可能的,如果没有某种宏系统,我认为它根本不可能.但即使使用宏,我也不认为编译器会满意,除非它在编译时知道列表的长度.
话虽如此,使用接受3,4,5或更多参数的版本手动重载currying函数是非常简单的:
func curry<A,C,D>(f: (A,C) -> D) -> A -> B -> C -> D { return { a in { b in { c in f(a,c) } } }}func curry<A,D,E>(f: (A,D) -> E) -> A -> B -> C -> D -> E { return { a in { b in { c in { d in f(a,c,d) } } } }}// etc.@H_404_2@ 总结以上是内存溢出为你收集整理的Swift中的咖喱功能全部内容,希望文章能够帮你解决Swift中的咖喱功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
概述我想创建一个返回咖喱函数的函数,如下所示 func addTwoNumbers(a: Int)(b: Int) -> Int { return a + b}addTwoNumbers(4)(b: 6) // Result: 10var add4 = addTwoNumbers(4)add4(b: 10) // returns 14 这种函数的返回类型是什么?如何使用采用Vari 我想创建一个返回咖喱函数的函数,如下所示
赞
(0)
打赏
微信扫一扫
支付宝扫一扫
swift 2中的异步错误处理
上一篇
2022-05-27
在Swift中初始化期间设置只读存储属性的值
下一篇
2022-05-27
评论列表(0条)