如何理解swift中的“一流功能”?

时间:2015-03-13 00:47:56

标签: swift first-class-functions

我正在阅读一些关于swift函数式编程的书籍。当我看到有些书说swift中的函数是"一流的功能"我混淆了"一流"的含义。任何人都可以回答我或给我一些示例代码吗?

3 个答案:

答案 0 :(得分:7)

函数是Swift中的一等公民,因为你可以将函数看作普通值。例如,你可以......

  • 将函数分配给局部变量
  • 将函数作为参数传递给另一个函数,并
  • 从函数返回函数。

答案 1 :(得分:2)

它目前很时髦的术语。它只是意味着您可以拥有一个包含对函数的引用的变量。

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

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

没有什么新东西,只是令人困惑的熟悉概念的术语。大概是为了让这个功能听起来更加新颖和性感。

答案 2 :(得分:1)

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

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))")