【问题标题】:Why is it possible for a Swift function to return a mathematical operator alone?为什么 Swift 函数可以单独返回一个数学运算符?
【发布时间】: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 语言量身定制的,但是您的回答为我提供了一些方向,可以更好地理解任何语言中的概念。

标签: swift-playground swift3.2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2020-04-05
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    相关资源
    最近更新 更多