Kotlin:本地函数是否作为内联参数传递给内联函数?
当将lambda或匿名函数作为参数传递给内联函数时,非常简单,代码粘贴到调用位置,但当将局部函数作为参数传递时,结果似乎不同(如下所示)。我想知道它是否是内联的?为什么 例如:Kotlin:本地函数是否作为内联参数传递给内联函数?,kotlin,inline,Kotlin,Inline,当将lambda或匿名函数作为参数传递给内联函数时,非常简单,代码粘贴到调用位置,但当将局部函数作为参数传递时,结果似乎不同(如下所示)。我想知道它是否是内联的?为什么 例如: inline fun foo(arg: () -> Int): Int { return arg() } fun bar(): Int { return 0 } fun main(args: Array<String>) { foo(::bar) } bar()未声明为内联
inline fun foo(arg: () -> Int): Int {
return arg()
}
fun bar(): Int {
return 0
}
fun main(args: Array<String>) {
foo(::bar)
}
bar()
未声明为内联。那你为什么希望它是内联的
换句话说:方法A的签名(隐式地)影响另一个方法B的签名是完全错误的
您的想法(不知何故)会影响bar()的“语义”——因为您使用了bar()
作为另一个方法调用的参数 正如您在中所能做的那样,kotlin在您的案例中不内联条
,但如果声明为内联乐趣条()
,它会内联它
规则是lambda在传递给内联函数时是内联的。在所有其他情况下,如传递函数引用或lambda对象,都不会进行内联。如果它已经是函数而不是闭包,为什么要内联它?无论如何都没有分配新对象谢谢,这帮了大忙,但我仍然不清楚闭包,我只有Java方面的经验。我的观点是,在这种情况下内联不会影响语义或性能,所以你不应该太在意。谢谢,
bar()
有自己的权利决定它的行为,我明白了。
public final class InlinedFuncKt {
public static final int foo(@NotNull Function0 arg) {
Intrinsics.checkParameterIsNotNull(arg, "arg");
return ((Number)arg.invoke()).intValue();
}
public static final int bar() {
return 0;
}
public static final void main(@NotNull String[] args) {
Intrinsics.checkParameterIsNotNull(args, "args");
bar();
}
}