【发布时间】:2017-09-17 04:50:26
【问题描述】:
我完全不知道下面 Swift 操场代码示例中的 addTwoNumbers 函数如何将“(+)”作为 (Int, Int) -> Int 类型的函数返回,然后成功地将两个数字相加只需调用“addTwoNumbers(2,2)”即可。
我无法在 Swift 文档中找到解释,因为那里似乎没有这种创造性的解决方案。我已经看到 StackOverflow 的答案发布了类似的代码作为其他问题的答案,但从未解释过 为什么 “= (+)” 有效。我错过了什么?
请注意:我理解运算符是一类函数。我也理解高阶函数的概念。我缩短了代码示例以保持主题,即 (+)。
let addTwoNumbers: (Int, Int) -> Int = (+)
print(addTwoNumbers(5,3)) //8
【问题讨论】:
-
更简单的请@Carcigenicate。将 + 括在括号中是否使其成为对象?因此,通过使用两个参数调用它,它就相当于 2 + 2?
-
@Carcigenicate:来自math.stackexchange.com/questions/168378/operator-vs-function 的评论指出“所有运算符都是函数”。因此,当一个函数返回一个运算符(在这种情况下 (+) 也是一个函数)时,假设调用它的唯一方法是通过 add(2,2) 是否安全,就像人们会 print("hello" )?换句话说,我们调用了带有两个参数的 + 函数,但是我们必须根据提供的代码示例输入 add(2,2) 而不是输入 +(2,2)?
-
我的示例和问题是针对高阶函数领域中的 Swift 语言量身定制的,但是您的回答为我提供了一些方向,可以更好地理解任何语言中的概念。