gpt4 book ai didi

function - 将内联函数定义作为输入参数传递给函数

转载 作者:可可西里 更新时间:2023-11-01 00:38:21 26 4
gpt4 key购买 nike

比如说,我有一个函数接受一个函数作为输入参数之一:

// modify passed string
func modifyString(paramString: String, modificationFunction: String -> String) -> String {
return modificationFunction(paramString)
}

现在我可以像这样定义一个函数:

func addLearningSuffix(inputString: String) -> String {
var returnString = inputString + " is learning swift"
return returnString
}

然后像这样使用它:

// adds suffix - is learning swift
modifyString("Miraaj", addLearningSuffix) // returns "Miraaj is learning swift"

在上面的例子中,我只是将函数名称 - addLearningSuffix 作为输入参数传递给函数 - modifyString,但是如果我想在传递时在同一行中定义函数怎么办它作为输入参数。

我知道函数是闭包的特例,所以我可以像这样传递内联闭包:

// adds prefix - Miraaj
modifyString("is learning swift",{
(inputString: String) -> String in
let result = "Miraaj " + inputString
return result // returns "Miraaj is learning swift"
})

或者像这样:

modifyString("is learning swift"){
(inputString: String) -> String in
let result = "Miraaj " + inputString
return result
}

但为什么我不能像这样传递内联函数定义:

modifyString(" is learning swift", func addSomeOtherPrefix(inputString: String) -> String{
return "Miraaj" + inputString
})

尝试哪个编译器提示 :(

如果我做错了什么,请提出建议。

最佳答案

想想声明一个对象然后使用它的区别:

var a = 100
abs(a)

与直接使用它相比:

abs(100)

同样的区别适用于声明然后使用函数:

func talk(x: String) { return x + " is talking" }
doThis(talk)

与直接使用它相比:

doThis( { x: String -> return x + " is talking" } )

写作

doThis( func talk(x: String) { return x + " is talking" } )

就像写作

abs(var a = 100)

这没有意义。

关于function - 将内联函数定义作为输入参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24602679/

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