我是 swift 和函数式编程的新手。
我的愚蠢问题如下:
元组可以返回一组函数吗?它是接受的函数吗?
someFunction(param: Bool) -> ((Int) -> Int, (Float) ->Float) -> Double)
感谢您的回复
你可以有任何类型的元组,函数就是类型,所以你可以有函数的元组。
例如,下面是一个包含两个函数的 2 元组,一个接受两个Int
并返回一个Int
,另一个接受两个Double
并返回一个Double
:
// a 2-tuple of the addition functions for ints and doubles
let tupleOfFunctions: ((Int,Int)->Int, (Double,Double)->Double) = (+,+)
当你说"一个元组可以返回一组函数吗?"时,我猜你的意思是,"一个函数可以返回一个函数元组吗?"。 答案也是肯定的:
func returnTwoFunctions(param: Bool) -> ((Int,Int)->Int, (Double,Double)->Double) {
// use the argument to drive whether to return some addition
// or some subtraction functions
return param ? (+,+) : (-,-)
}
不过,您的示例有点混乱——如果您在前面添加了 func
关键字,它将是一个函数声明,但括号不匹配。 它看起来最像的是一个函数(someFunction
),它接受一个布尔参数,并返回一个函数,该函数本身接受两个函数并返回一个双精度:
func someFunction(param: Bool) -> (Int->Int, Float->Float) -> Double {
let i = param ? 1 : 2
// this declares and returns a function that itself takes two functions,
// and applies them to pre-determined number
return { f, g in Double(g(Float(f(i)))) }
}
// h is now a function that takes two functions and returns a double
let h = someFunction(false)
// ~ and + are two unary functions that operate on ints and floats
h(~,+) // returns -3.0 (which is +(~2) )
这是否是你的意图,以及你是否有这种功能的用例,我不确定......