我完全不知道下面的Swift游乐场代码示例中的addTwoNumbers函数如何返回“(+)”作为类型(Int,Int)的函数 - > Int和稍后通过简单地调用“addTwoNumbers(2,2)”成功地将两个数字加在一起。
我无法在Swift文档中找到解释,因为这个创意解决方案似乎不存在。我已经看到StackOverflow会回答类似的代码作为其他问题的答案,但从未解释为什么“=(+)”有效。我错过了什么?
请注意:我理解运算符是头等函数的函数。我也理解高阶函数的概念。我缩短了代码示例以保持主题,即(+)。
let addTwoNumbers: (Int, Int) -> Int = (+)
print(addTwoNumbers(5,3)) //8
答案 0 :(得分:0)
在您的示例中,没有真正返回+
,它所做的是将值+
(运算符是函数和函数可以被视为值)赋给变量,即addTwoNumbers
。
此变量的类型为(Int, Int) -> Int
,即返回int的两个int的函数。现在函数是一种特殊的变量,它可以将括号作为一种后缀运算符,有点像普通变量需要.
。如果你写的名字addTwoNumbers
没有括号,它引用的是函数(碰巧是+),但是对于它们和一些操作数,函数会被应用,而值将是函数返回的那些参数
请注意,let addTwoNumbers: (Int, Int) -> Int = (+)
几乎等同于func addTwoNumbers(_ a: Int, _ b: Int) -> Int { return a + b }