Size: a a a

2019 May 29

VP

Vladimir Petrakovich in Kotlin JVM
Alexey Otts
фак, на маке не работает
@frostbit ты на чём разрабатываешь?
Linux. Ну хз, вроде не должно влиять
источник

AO

Alexey Otts in Kotlin JVM
Ну вот у меня на линухах тоже всё ок, на маке траблы
источник

AO

Alexey Otts in Kotlin JVM
Кто нибудь может с ходу сказать почему так низя?
inline fun <A, B> methodRef(crossinline f: (A) -> B): (A) -> B = f
источник

RI

Ruslan Ibragimov in Kotlin JVM
Alexey Otts
Кто нибудь может с ходу сказать почему так низя?
inline fun <A, B> methodRef(crossinline f: (A) -> B): (A) -> B = f
inline говорит что функциональный тип будет заинлайнен, соответсвенно внутри неё по другому работает return и т.д., а потом ты пытаешься вернуть заинлайненный код, что должно вернутся? Создаться лямбда на лету?
источник

VP

Vladimir Petrakovich in Kotlin JVM
Alexey Otts
Кто нибудь может с ходу сказать почему так низя?
inline fun <A, B> methodRef(crossinline f: (A) -> B): (A) -> B = f
А как там может быть инлайн, если надо функцию в объект завернуть?
источник

AO

Alexey Otts in Kotlin JVM
А ну да, надо же просто noinline написать, а не crossinline
источник

AO

Alexey Otts in Kotlin JVM
Ruslan Ibragimov
inline говорит что функциональный тип будет заинлайнен, соответсвенно внутри неё по другому работает return и т.д., а потом ты пытаешься вернуть заинлайненный код, что должно вернутся? Создаться лямбда на лету?
Ага, хотелось на холяву конвертить method reference в лямбду
источник

AO

Alexey Otts in Kotlin JVM
По какой то неведомой причине когда генеряться стабы для капта такой метод:
fun foo() = ::Foo


конвертится в
public kotlin.reflect.KFunction<Foo> foo()
источник

AO

Alexey Otts in Kotlin JVM
наверное это ок со стороны тайпера, но я не понимаю почему
источник

VP

Vladimir Petrakovich in Kotlin JVM
Alexey Otts
По какой то неведомой причине когда генеряться стабы для капта такой метод:
fun foo() = ::Foo


конвертится в
public kotlin.reflect.KFunction<Foo> foo()
Так это же вроде и есть () -> Foo
источник

AO

Alexey Otts in Kotlin JVM
Скажем, что Foo - это class Foo(val bar: Bar) тем не менее, результат будет тот же что и сверху
источник

VP

Vladimir Petrakovich in Kotlin JVM
Интересно 🤔
А какой тип у foo()?
источник

AO

Alexey Otts in Kotlin JVM
источник

AO

Alexey Otts in Kotlin JVM
Выбирай дорогой
источник

VP

Vladimir Petrakovich in Kotlin JVM
Видимо, () -> Foo - это KFunction0<Foo>, а KFunction<*> - это любая функция.
У меня нет идей, почему выбирается этот тип 🤷‍♂️
источник

AO

Alexey Otts in Kotlin JVM
Вот и я не смог, поэтому родилась идея с
inline fun <A, B> methodRef(crossinline f: (A) -> B): (A) -> B = f
источник

VP

Vladimir Petrakovich in Kotlin JVM
Так а если явно указать (Int) -> Foo, то же самое?
источник

AO

Alexey Otts in Kotlin JVM
Да, но вся суть не указывать тип)
источник

BP

Bogdan Panchenko in Kotlin JVM
Alexey Otts
По какой то неведомой причине когда генеряться стабы для капта такой метод:
fun foo() = ::Foo


конвертится в
public kotlin.reflect.KFunction<Foo> foo()
есть такое подозрения, метод реф  - это конструктор, и это логично
источник

BP

Bogdan Panchenko in Kotlin JVM
если я правильно понял что Foo(val bar: Int)
источник