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)