为什么我会陷入编译循环——Lambda



为什么在Playground中尝试运行以下程序时会陷入编译循环?

func makeIncrementer(byHowMuch: Int) -> ((Int) -> Int) {
    func addArg(number: Int) -> Int {
        return 2 + number
    }
    return addArg
}
var twoTimesIncrementer = makeIncrementer(2)
twoTimesIncrementer(7)

另外,在非函数语言中,如何调用返回函数的函数?Lambda还在吗?

首先,我没有陷入编译循环,它按预期返回9。游乐场也有相当多的bug,如果某个东西在游乐场不起作用,就把它放在一个实际的项目中,试着运行它,在那里你会看到它是否真的起作用。

其次,返回函数的函数仍然是一个函数,它的命名不会随着返回类型的变化而改变。唯一需要注意的是,在Swift中,您可以将函数作为第一类对象,您的twoTimesIncrementer和其他任何变量一样是一个变量。

除此之外,我的建议是不要过度痴迷于某些模式或功能的命名。你有没有一个非函数语言的例子,你可以定义返回函数的函数?

最新更新