kotlin plus 运算符的函数定义在哪里?

Posted

技术标签:

【中文标题】kotlin plus 运算符的函数定义在哪里?【英文标题】:Where is function definition of kotlin plus operator? 【发布时间】:2019-11-26 01:37:58 【问题描述】:

我只是在 kotlin 源代码中查看 Primitives.kt 文件的源代码,以查看“加号”运算符的功能代码。

/** Adds the other value to this value. */
public operator fun plus(other: Int): Int

谁能帮我指导一下这个函数的代码在哪里?

【问题讨论】:

【参考方案1】:

Primitives.kt 中的这些函数作为编译器内部函数实现。这意味着当编译器遇到这样的函数调用时,它会用一些预定义的低级代码序列或对另一个函数的调用来替换它。

例如在Kotlin/JVM中,这段代码中的函数调用Int.plus(Int): Int

fun test(x: Int, y: Int) 
    x.plus(y)

被替换为类似这样的字节码序列:

    ILOAD 0
    ILOAD 1
    IADD

还有一个内部函数调用被另一个函数调用替换的例子:

fun test(x: Int, y: Int) 
    x.compareTo(y)

编译为:

    ILOAD 0
    ILOAD 1
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.compare (II)I

这里调用的是静态函数Instrincs.compare(Int, Int),而不是成员函数Int.compareTo(Int)

【讨论】:

感谢@llya 给了我一个很好的提示让我进一步搜索。

以上是关于kotlin plus 运算符的函数定义在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

高阶函数式编程:在 Kotlin 中“实现”单子(Monad)

高阶函数式编程二:在 Kotlin 中实现单位半群(Monoid)

C++ Primer Plus学习:第十一章

大家都在说Kotlin,它到底好在哪里?

在 Kotlin DSL 中是不是可以完全避免函数名称?

Kotlin-数组