gpt4 book ai didi

swift - 如果常量变量是函数类型的类型,那么什么是不能改变的呢?

转载 作者:行者123 更新时间:2023-11-28 09:55:33 24 4
gpt4 key购买 nike

此处使用的代码来自Swift Official Document

func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0

func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}

// what is the different with "var incrementByTen"
let incrementByTen = makeIncrementer(forIncrement: 10)

// why there is a "()" ajacent to the variable name?
incrementByTen()

变量incrementByTen被赋值为makeIncrementer返回的函数,with的参数为10。

问题 1. increemtnByTen 被赋值给变量而不是常量时有什么不同?既然这里是常量,那哪部分是不变的呢?

问题2. 为什么调用时变量名要用括号“()”,我知道这可能是函数初始化人员。但是 incrementByTen 是一个常量名称。它等于它指向的函数吗?或者这只是一种编程语言的一般特性。当你想使用一个函数类型的变量/常量时,你必须使用“()”和名称。

最佳答案

Variable incrementByTen is assigned with the function

这是一切的关键。 incrementByTen 的值是一个函数。

如果 incrementByTen 是一个 var 变量,那么它可以被重新分配给其他一些函数。因为它是一个 let 变量,所以它是一个常量函数。这与 Int 类型的 varlet 变量完全相同。整数值和函数值之间没有太大区别。它们只是值(value)观。

括号的意思是“调用函数”。 incrementByTen 不是调用函数的结果;它是函数本身。这是一个值(value)。评估该值时,它会返回一个函数。然后,您可以使用 () 运算符调用该函数。

这完全等同于:

makeIncrementer(forIncrement: 10)()

makeIncrementer(forIncrement: 10) 返回一个函数,() 调用该函数。这类似于:

let x = thingThatReturnsInt()
x + 10

在这种情况下,x 是一个Int,我们可以对其应用运算符+makeIncrementer 恰好返回 () -> Int 而不是 Int

关于swift - 如果常量变量是函数类型的类型,那么什么是不能改变的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com