不使用参数标签调用函数的最短方法?

时间:2018-12-15 13:04:29

标签: swift arguments label

这个问题只是让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:)函数?

0 个答案:

没有答案