如何理解swift中的"first-class function"?
How to comprehend the "first-class function" in swift?
我正在阅读一些关于 swift 中函数式编程的书籍。看到有些书上说swift里的函数是"first-class function",搞不懂"first-class"是什么意思。有人可以回答我或给我一些示例代码吗?
函数是 Swift 中的第一个 class 公民,因为您可以将函数视为正常值。例如,您可以……
- 将一个函数赋给一个局部变量,
- 将一个函数作为参数传递给另一个函数,并且
- return 函数中的函数。
它只是当前流行的花哨术语。这只是意味着您可以拥有一个包含对函数的引用的变量。
它一直在编程;在 C 和 Fortran 中,你有指向函数的指针。这两种语言的典型用法是将比较函数传递给排序函数,以便排序函数可以对任何数据类型进行排序。
在某些语言中,例如Java,看来您没有指向函数的指针,但是您确实有指向接口的指针。因此,您使用比较方法定义了一个 Comparable 接口,并将 Comparable 的实例传递给您的排序。
没什么新鲜的,只是对熟悉的概念混淆了术语。大概是为了尝试使该功能听起来新颖而性感。
请在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))")
我正在阅读一些关于 swift 中函数式编程的书籍。看到有些书上说swift里的函数是"first-class function",搞不懂"first-class"是什么意思。有人可以回答我或给我一些示例代码吗?
函数是 Swift 中的第一个 class 公民,因为您可以将函数视为正常值。例如,您可以……
- 将一个函数赋给一个局部变量,
- 将一个函数作为参数传递给另一个函数,并且
- return 函数中的函数。
它只是当前流行的花哨术语。这只是意味着您可以拥有一个包含对函数的引用的变量。
它一直在编程;在 C 和 Fortran 中,你有指向函数的指针。这两种语言的典型用法是将比较函数传递给排序函数,以便排序函数可以对任何数据类型进行排序。
在某些语言中,例如Java,看来您没有指向函数的指针,但是您确实有指向接口的指针。因此,您使用比较方法定义了一个 Comparable 接口,并将 Comparable 的实例传递给您的排序。
没什么新鲜的,只是对熟悉的概念混淆了术语。大概是为了尝试使该功能听起来新颖而性感。
请在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))")