Самый короткий способ вызвать функцию без использования метки аргумента? - PullRequest
0 голосов
/ 15 декабря 2018

Этот вопрос просто веселит Свифта.Пожалуйста, не принимайте это всерьез ...

В Свифте, учитывая эту функцию:

func greet(name: String) {
    print("Hello \(name)!")
}

правильный способ его вызова такой:

greet(name: "Bob")  // "Hello Bob!"

Если вы опустите метку аргумента name:

greet("Bob")

, вы получите ошибку: Отсутствует метка аргумента 'name:' в вызове

Но обработка функции как замыкания позволяет вам вызывать ее без метки аргумента:

let g = greet; g("Bob")  // "Hello Bob!"

Это заставило меня задуматься, каков наиболее краткий способ вызова функциибез использования метки аргумента?


Обернуть это в кортеж?

Я подумал обернуть функцию в кортеж и затем извлечьэто будет работать:

(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!"

Этоиспользует только на 5 символов больше, чем greet("Bob"), что представляется самым коротким из возможных вызовов , если бы он работал .

. Есть ли более короткий способ вызова функции greet(name:) без использования аргументаярлык чем это?

...