Size: a a a

Kotlin Community

2020 June 22

BP

Bogdan Panchenko in Kotlin Community
Iaroslav Orlov
поэтому нужно как-то указать тип ресивера явно, а я не совсем понимаю, как это сделать для лямбды
Указать как параметер ?
источник

IO

Iaroslav Orlov in Kotlin Community
да
источник

IO

Iaroslav Orlov in Kotlin Community
Iaroslav Orlov
в котлине можно указать тип ресивера, кроме как в анонимной функции?
вот у анонимной функции так можно.
источник

BP

Bogdan Panchenko in Kotlin Community
{ receive: Receive Type } так не работает ?
источник

IO

Iaroslav Orlov in Kotlin Community
нет
источник

VP

Vladimir Petrakovich in Kotlin Community
Iaroslav Orlov
поэтому нужно как-то указать тип ресивера явно, а я не совсем понимаю, как это сделать для лямбды
Обязательно в самой лямбде?
источник

IO

Iaroslav Orlov in Kotlin Community
ну, скорее всего, да, потому что action принимает вообще любой функциональый тип: Function<Unit>
источник

AL

Alexander Levin in Kotlin Community
Iaroslav Orlov
в котлине можно указать тип ресивера, кроме как в анонимной функции?
Скорее нет, если не ошибаюсь, то лямбда литералы могут только из контекста выводиться, что они с ресивером (переданы в однозначную функцию или явно указан тип)

https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver
источник

IO

Iaroslav Orlov in Kotlin Community
т.е. я понимаю, можно делать только так:
val lambda: CommandSender.() -> Unit = {...}; action(lambda)?
источник

AL

Alexander Levin in Kotlin Community
Iaroslav Orlov
т.е. я понимаю, можно делать только так:
val lambda: CommandSender.() -> Unit = {...}; action(lambda)?
Ну вроде да, опций три:
1. Задать как-либо явный тип (например вынеся в переменную)
2. Сделать так, чтобы функция, которая принимает функцию с ресивером, была отличима от остальных
3. Использовать синтаксис с анонимными функциями
источник

AL

Alexander Levin in Kotlin Community
Т.е. первый пункт конечно можно сделать без переменной, но не факт, что стоит :D
Пример - run<Int.(Int) -> Int> { { this + it } }
источник

IS

Ivan Sablin in Kotlin Community
Привет! Вопрос такой, как проинициализировать класс свойством с кастомным геттером используя di, в моем случае kodein?
источник

IS

Ivan Sablin in Kotlin Community
Тобишь мне нужно вот этот токен, чтобы был в defaultRequest, при том с кастомным геттером
источник

RI

Ruslan Ibragimov in Kotlin Community
Сделать класс конфигурации и инициализировать в нем как и что хочется
источник

RI

Ruslan Ibragimov in Kotlin Community
bind<String> - ну такое, я бы у себя в проектах бил по рукам
источник

AL

Alexander Levin in Kotlin Community
Ivan Sablin
Привет! Вопрос такой, как проинициализировать класс свойством с кастомным геттером используя di, в моем случае kodein?
Ну если DI адекватный, то отличий не должно быть, просто делаете конструктор с параметром, но не пропертёй, а затем пропертю внутри класса делаете:

class Foo(bar: String) {
  val bar: String
      get() = TODO()


*не исключаю, что вопрос не понял или переоценил качество этого DI
источник

RI

Ruslan Ibragimov in Kotlin Community
Ruslan Ibragimov
bind<String> - ну такое, я бы у себя в проектах бил по рукам
Надо у себя в проекте добавить ворнинги чтобы били по рукам за bind примитивных типов, спасибо за идею :)
источник

IS

Ivan Sablin in Kotlin Community
ну в целом задача такая, что есть httpclient, есть токен, который может меняться, мне надо запровайдить клиент, в него передать пропертю отуда будет браться актуальный токен
источник

IS

Ivan Sablin in Kotlin Community
правильно ли это здесь делать и у меня файлы с di не классы, просто файлы с модулями и компонентами
источник

IS

Ivan Sablin in Kotlin Community
и твой пример не понял немного, как он должен работать
источник