swift 中元组接受的值

Values accepted in a tuple in swift

我是 swift 和函数式编程的新手。

我的愚蠢问题如下:

一个元组可以return一组函数吗? 是否接受了这样的功能?

someFunction(param: Bool) -> ((Int) -> Int, (Float) ->Float) -> Double)

感谢您的回复

您可以拥有任何类型的元组,而函数是类型,因此您可以拥有函数元组。

例如,这是一个包含两个函数的二元组,一个需要两个 Ints 和 returns 一个 Int,另一个需要两个 Doubles 和 returns 一个 Double:

// a 2-tuple of the addition functions for ints and doubles
let tupleOfFunctions: ((Int,Int)->Int, (Double,Double)->Double) = (+,+)

当你说,“一个元组 return 可以是一组函数吗?”,我猜你的意思是,“一个函数 return 可以是一个函数的元组吗?”。答案也是肯定的:

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),而 return 是一个本身接受两个函数并且 return 是一个双精度函数的函数:

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) )

这是否是您的意图,以及您是否有此类功能的用例,我不确定...