только crossinline лямбдами. При этом если я вызову такую функцию в рамках suspend функции контекст внутри инлайн функции не будет считаться suspend (то есть я не смогу вызывать suspend методы/функции несмотря на то, что нахожусь в кроссинлайн блоке в инлайн функции, вызванной в suspend). Вопрос - как сейчас решать такую проблему?
К слову, в рамках stdlib это решается через пометку инлайн функции как @InlineOnly, но эта аннотация внутренняя, и использовать я её не могу
Сделать crossinline тоже suspend.
Не, тогда из обычных функций нельзя будет использовать
Почему? Внутри suspend лямбды можно вызывать обычные функции. Если лямбда вызывается внутри самой инлайн функции, а не внутри другой лямбды, то убрать crossinline. @InlineOnly на возможность вызова suspend не влияет.
А саспенд лямбду нельзя вызвать из не саспенд инлайн функции
Возможно, вопрос в контрактах, но контракты пока экспериментальны
Саспенд лямбду нельзя из обычного кода вызвать. А внутри саспенд лямбды можно обычные функции вызвать. Без кода неясно чего вы хотите добиться. Зачем вам кроссинлайн?
Они тоже здесь не помогут.
Тогда почему let можно вызвать откуда угодно и в рамках вызова в корутине внутри let это будет видно?
Потому что let не принимает crossinline. Это инлайн функция, принимающая инлайн лямбду.
Понял, спасибо
моё предположение, что не нужны нелокальные возвраты, но нужны корутины
Обсуждают сегодня