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

标签 kotlin inline

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

例如:

inline fun foo(arg: () -> Int): Int {
    return arg()
}

fun bar(): Int {
    return 0
}

fun main(args: Array<String>) {
    foo(::bar)
}

并反编译Java代码:
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();
   }
}

最佳答案

bar()不是 声明为内联。那么你为什么希望它被内联?!

换句话说:方法 A 的签名影响(隐式)另一个方法 B 的签名是完全错误的。

你的想法会(以某种方式)影响 bar() 的“语义”——仅仅因为你使用了 bar()作为另一个方法调用的参数。

关于Kotlin:本地函数是否作为内联参数传递给内联函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44642823/

相关文章:

html - 如何使用内联样式删除 UL 标签的 CSS 属性值

html - 显示两个或多个彼此相邻的无序列表

c++ - 样式 : Inline on the function declaration

java - 如何保存项目的按钮 src 状态

json - 有时对于两种不同的数据类型使用相同的 SerializedName,但使用 Kotlin

kotlin - 为什么委托(delegate)类方法getValue 和setValue 需要用operator 关键字标记?

algorithm - Kotlin - 从数组中删除重复字符串的惯用方法?

json - 使用 kotlinx 序列化序列化选项列表

c++ - 使 getter 和 setter 内联是一种好习惯吗?

c++ - 共享库的 cpp 文件中的内联函数