1

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

我无法在 Swift 文档中找到解释,因为那里似乎没有这种创造性的解决方案。我已经看到 StackOverflow 的答案发布了类似的代码作为其他问题的答案,但从未解释过为什么“= (+)”有效。我错过了什么?

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

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

1 回答 1

0

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

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

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

于 2017-10-10T18:08:17.487 回答