Я знаю, что встроенная функция, возможно, улучшит производительность и заставит сгенерированный код расти, но я не уверен, когда это правильно использовать.
lock(l) { foo() }
Вместо создания объекта функции для параметра и создания вызова компилятор может испустить следующий код. (Источник)
l.lock()
try {
foo()
}
finally {
l.unlock()
}
но я обнаружил, что функциональный объект, созданный kotlin для не-встроенной функции, отсутствует. почему?
/**non-inline function**/
fun lock(lock: Lock, block: () -> Unit) {
lock.lock();
try {
block();
} finally {
lock.unlock();
}
}