-
Этот код компилируется с предупреждением (незначительное влияние на производительность):
inline fun test(noinline f: () -> Unit) { thread(block = f) } -
Этот код не компилирует (незаконное использование встроенного параметра):
inline fun test(crossinline f: () -> Unit) { thread(block = f) } -
Этот код компилируется с предупреждением (незначительное влияние на производительность):
inline fun test(noinline f: () -> Unit) { thread { f() } } -
Этот код компилируется без предупреждения или ошибки:
inline fun test(crossinline f: () -> Unit) { thread { f() } }
Вот мои вопросы:
- Почему (2) не компилируется, но (4) делает?
- В чем разница между
noinlineиcrossinline? - Если (3) не генерирует никаких улучшений производительности, почему бы (4) сделать?