func mymethod(getno:Int)->(myval :Int,defaults :Int){
return (getno,8)
}
print(mymethod(getno: 2))
以上程序的输出为 我的val是2,默认是8
好的,我可以理解以上程序
但是以下方法对我来说值得怀疑
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
我不明白这一行(var增量= makeIncrementer())那里发生了什么?
有人可以简短地向我解释一下吗?
答案 0 :(得分:1)
makeIncrementer
返回一个接受Int
并返回Int
的函数,因此
var increment = makeIncrementer()
使increment
变量等于
func addOne(number: Int) -> Int {
return 1 + number
}
所以increment(7) = addOne(7)
您可以阅读Swift书中的Functions一章
答案 1 :(得分:0)
您并不孤单。刚开始时,我也很难为这个问题着迷:)
您看到的是“一个函数返回另一个函数”。可以将功能想像成黑盒子,将东西塞进去,然后将东西吐出。现在想象一下将它们传递为10
或"Hello"
之类的值。
makeIncrementer
返回一个函数。哪个功能?这个:
func addOne(number: Int) -> Int {
return 1 + number
}
看到return addOne
行吗?那不是在调用函数,而是在返回它!
因此,当您将makeIncrementer
的返回值分配给increment
时:
var increment = makeIncrementer()
increment
的值现在为addOne
。调用increment
与调用addOne
相同。上面的语法在语法上与以下内容没有区别:
var myString = getMyString()
区别在于您使用的是函数而不是字符串。
现在您了解了increment(7)
为什么是8了。
如果您想更多地消耗大脑,请尝试查找currying函数。