我知道内联函数可能会提高性能并导致生成的代码增长,但我不确定何时正确使用它.
lock(l) { foo() }
Run Code Online (Sandbox Code Playgroud)
编译器可以发出以下代码,而不是为参数创建函数对象并生成调用.(来源)
l.lock()
try {
foo()
}
finally {
l.unlock()
}
Run Code Online (Sandbox Code Playgroud)
但我发现kotlin没有为非内联函数创建的函数对象.为什么?
/**non-inline function**/
fun lock(lock: Lock, block: () -> Unit) {
lock.lock();
try {
block();
} finally {
lock.unlock();
}
}
Run Code Online (Sandbox Code Playgroud)