为什么Swift函数可以单独返回数学运算符?

时间:2017-09-17 04:50:26

标签: swift-playground swift3.2

我完全不知道下面的Swift游乐场代码示例中的addTwoNumbers函数如何返回“(+)”作为类型(Int,Int)的函数 - > Int和稍后通过简单地调用“addTwoNumbers(2,2)”成功地将两个数字加在一起。

我无法在Swift文档中找到解释,因为这个创意解决方案似乎不存在。我已经看到StackOverflow会回答类似的代码作为其他问题的答案,但从未解释为什么“=(+)”有效。我错过了什么?

请注意:我理解运算符是头等函数的函数。我也理解高阶函数的概念。我缩短了代码示例以保持主题,即(+)。

let addTwoNumbers: (Int, Int) -> Int = (+)
print(addTwoNumbers(5,3)) //8

1 个答案:

答案 0 :(得分:0)

在您的示例中,没有真正返回+,它所做的是将值+(运算符是函数和函数可以被视为值)赋给变量,即addTwoNumbers

此变量的类型为(Int, Int) -> Int,即返回int的两个int的函数。现在函数是一种特殊的变量,它可以将括号作为一种后缀运算符,有点像普通变量需要.。如果你写的名字addTwoNumbers没有括号,它引用的是函数(碰巧是+),但是对于它们和一些操作数,函数会被应用,而值将是函数返回的那些参数

请注意,let addTwoNumbers: (Int, Int) -> Int = (+)几乎等同于func addTwoNumbers(_ a: Int, _ b: Int) -> Int { return a + b }