0

我正在阅读一些关于 swift 函数式编程的书籍。当我看到一些书说swift中的函数是“一等函数”时,我混淆了“一等”的含义。有人可以回答我或给我一些示例代码吗?

4

3 回答 3

8

函数是 Swift 中的一等公民,因为您可以将函数视为普通值。例如,您可以……</p>

  • 将函数分配给局部变量,
  • 将一个函数作为参数传递给另一个函数,并且
  • 从函数返回一个函数。
于 2015-03-13T00:49:44.047 回答
2

它只是目前流行的花哨术语。这只是意味着您可以拥有一个包含对函数的引用的变量。

它一直在编程;在 C 和 Fortran 中,您有指向函数的指针。这两种语言的典型用途是将比较函数传递给排序函数,以便排序函数可以对任何数据类型进行排序。

在某些语言中,例如Java,您似乎没有指向函数的指针,但确实有指向接口的指针。因此,您使用 compare 方法定义了 Comparable 接口,并将 Comparable 的实例传递给您的排序。

没有什么新鲜的,只是一个熟悉的概念令人困惑的术语。大概是为了尝试使该功能听起来新颖而性感。

于 2015-03-13T01:50:20.497 回答
1

请参阅我在这个问题中的回答。我将再添加一个示例(请先检查该问题中的示例):

func operateMono( operand: String) -> (Double -> Double)?{
    switch operand{
    case "log10":
        return log
    case "log2":
        return log2
    case "sin":
        return sin
    case "cos":
        return cos
    default:
        return nil
    }
}

以及用法

var functionMono = operateMono("log10")
print ("log10 for 10 = \(functionMono!(10))")

functionMono = operateMono("log2")
print ("log2 for 10 = \(functionMono!(10))")

functionMono = operateMono("sin")
print ("sin 10 = \(functionMono!(10))")

functionMono = operateMono("cos")
print ("cos 10 = \(functionMono!(10))")
于 2015-09-11T16:39:31.403 回答