swift 中元组接受的值
Values accepted in a tuple in swift
我是 swift 和函数式编程的新手。
我的愚蠢问题如下:
一个元组可以return一组函数吗?
是否接受了这样的功能?
someFunction(param: Bool) -> ((Int) -> Int, (Float) ->Float) -> Double)
感谢您的回复
您可以拥有任何类型的元组,而函数是类型,因此您可以拥有函数元组。
例如,这是一个包含两个函数的二元组,一个需要两个 Int
s 和 returns 一个 Int
,另一个需要两个 Double
s 和 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) )
这是否是您的意图,以及您是否有此类功能的用例,我不确定...
我是 swift 和函数式编程的新手。
我的愚蠢问题如下:
一个元组可以return一组函数吗? 是否接受了这样的功能?
someFunction(param: Bool) -> ((Int) -> Int, (Float) ->Float) -> Double)
感谢您的回复
您可以拥有任何类型的元组,而函数是类型,因此您可以拥有函数元组。
例如,这是一个包含两个函数的二元组,一个需要两个 Int
s 和 returns 一个 Int
,另一个需要两个 Double
s 和 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) )
这是否是您的意图,以及您是否有此类功能的用例,我不确定...