Kotlin: Разница между {} и () при использовании преобразования карты? - PullRequest
0 голосов
/ 26 марта 2020

Я новичок в kotlin. Я всегда использовал преобразование карты с фигурными скобками. Тогда -

Почему это работает ->

val x = someList.map(::SomeConstructor)

, а это не так?

val x = someList.map{ ::SomeConstructor }

Я не нашел нигде использования карты с круглыми скобками по онлайн-учебникам.

Пожалуйста, попробуйте подробно объяснить или предоставить подходящую справочную статью.

1 Ответ

3 голосов
/ 26 марта 2020

То, что вы спрашиваете, объяснено в этой официальной документации .

Если и только если последний аргумент функции является лямбда-выражением, вы можете извлечь его из парантез вызова, чтобы поместить его в строку справа от функции. Он допускает более приятный синтаксис DSL.

EDIT : Давайте рассмотрим пример:

Один из хороших вариантов использования - контекстное программирование. Представьте, что у вас есть близкий объект. Вы хотите ограничить его использование, чтобы убедиться, что оно правильно закрыто, когда больше не нужно. В Java вы получаете попытку с ресурсами:

try (final AutoCloseable myResource = aquireStuff()) {
  // use your resource here.
}

Kotlin обеспечивают функцию use. Теперь вы можете сделать:

acquireStuff().use( { doStuff1(it) ; doStuff2(it) } )

или написать:

acquireStuff().use {
  doStuff1(it)
  doStuff2(it)
}

Это похоже на Java try-w-ресурс, но оно расширяемо для любого вашего API. Позволяет вам проектировать библиотеки, предоставляя расширенные конструкции конечным пользователям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...