“函数是 Swift 中的一流类型”?

问题描述 投票:0回答:6

我对第一类函数的了解是它支持将函数作为参数传递,我们也可以将它们作为另一个函数中的值返回...我对 Swift 编程语言非常陌生,任何人都可以用一个例子来详细说明.

swift function first-class-functions
6个回答
13
投票

一个非常简单的例子来演示这种行为:

func functionA() {
    println("Hello by functionA")
}

func executeFunction(function: () -> ()) {
    function()
}

executeFunction(functionA)

5
投票

First-Class 函数是可以返回另一个函数的函数。 例如:

func operate( operand: String) -> ((Double, Double) -> Double)?{

    func add(a: Double, b: Double) -> Double {
        return a + b
    }

    func min(a: Double, b: Double) -> Double{
        return a - b
    }

    func multi(a: Double, b: Double) -> Double {
        return a * b
    }

    func div (a: Double, b: Double) -> Double{
        return a / b
    }

    switch operand{
    case "+":
        return add
    case "-":
        return min
    case "*":
        return multi
    case "/":
        return div
    default:
        return nil
    }
}

函数

operate
返回一个以两个 double 作为参数并返回一个 double 的函数。

该功能的用法是:

var function = operate("+")
print(" 3 + 4 = \(function!(3,4))")

function = operate("-")
print(" 3 - 4 = \(function!(3,4))")

function = operate("*")
print(" 3 * 4 = \(function!(3,4))")

function = operate("/")
print(" 3 / 4 = \(function!(3,4))")

当您不关心函数的实现时,使用 First-Class 函数返回 这些 函数会变得有益。另外,有时,您不负责开发(或未授权)诸如

add
min
之类的功能。因此,有人会为您开发一个返回这些函数的一流函数,而您有责任继续......


1
投票

从词法环境捕获值时返回函数的函数:

enter image description here

Comparables 数组的函数,返回测试谓词的函数,该测试谓词返回值的函数,如果该值是被测数组的极值,则返回 Bool。 (柯里化)

enter image description here


1
投票

当函数被视为普通变量时,任何编程语言都被认为具有一流的函数。这意味着函数可以作为参数传递给任何其他函数,可以由任何函数返回,也可以分配给任何变量。

即(参考苹果的例子)

将函数作为参数传递

func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
    for item in list {
        if condition(item) {
            return true
        }
    }
    return false
}

返回功能

func makeIncrementer() -> ((Int) -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}

0
投票

一等函数的性质

  1. 函数是对象类型的实例。
  2. 您可以将函数存储在变量中。
  3. 您可以将函数作为参数传递给 另一个功能。
  4. 您可以从函数返回该函数。
  5. 您可以将它们存储在哈希表、列表等数据结构中

参考https://www.geeksforgeeks.org/first-class-functions-python/


0
投票

一流的概念是通用的,适用于多种语言。它的意思是,如果某物满足以下条件,则可以被归类为一流:

  • 可以传递到函数中
  • 可以作为返回类型从函数返回
  • 可以赋值给变量
  • 可以测试是否相等

例如,函数在 Python、JavaScript 和 Swift 等语言中是一流的。 除了函数之外,Swift 还具有其他一流类型,其中包括

  • 演员
  • 课程
  • 结构
  • 功能
  • 关闭
  • 枚举
  • 元组
  • 协议
© www.soinside.com 2019 - 2024. All rights reserved.