这个问题只是让Swift玩得开心。请不要太在意...
在Swift中,具有以下功能:
func greet(name: String) {
print("Hello \(name)!")
}
正确的调用方式如下:
greet(name: "Bob") // "Hello Bob!"
如果省略参数标签 name
:
greet("Bob")
您收到错误:呼叫中缺少参数标签“名称:”
但是将函数视为 closure 允许您在不带参数标签的情况下调用它:
let g = greet; g("Bob") // "Hello Bob!"
这让我想知道,不使用参数标签调用函数的最简洁方法是什么?
将其包装为元组吗?
我认为将函数包装在 tuple 中,然后将其提取会起作用:
(greet).0("Bob")
但这会导致错误:类型'(String)->()'的值没有成员'0'。
这有效:
(greet,greet).0("Bob") // "Hello Bob!"
显然,Swift将1值的简单元组视为值本身。
为元组参数赋予标签有效:
(g:greet).g("Bob") // "Hello Bob!"
(g:greet).0("Bob") // "Hello Bob!"
将其放入数组吗?
到目前为止,我发现的最简洁的方法是将函数放入数组:
[greet][0]("Bob") // "Hello Bob!"
这比greet("Bob")
仅使用5个字符,这似乎是最短的调用(如果可行的话)。
在不使用参数标签的情况下,有没有比这更短的方法来调用greet(name:)
函数?