Kotlin:本地函数是否作为内联参数传递给内联函数?

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()未声明为内联

当将lambda或匿名函数作为参数传递给内联函数时,非常简单,代码粘贴到调用位置,但当将局部函数作为参数传递时,结果似乎不同(如下所示)。我想知道它是否是内联的?为什么

例如:

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();
   }
}