gpt4 book ai didi

scala - Kotlin 的扩展函数是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 13:06:39 25 4
gpt4 key购买 nike

假设我想要一个提供 square 的整数。方法。
Kotlin :

fun Int.square() = this * this
用法:
println("${20.square()}")
文档:

Extensions do not actually modify classes they extend. By defining an extension, you do not insert new members into a class, but merely make new functions callable with the dot-notation on variables of this type.

We would like to emphasize that extension functions are dispatched statically


我的期望是他们只是在编译期间将它添加到扩展类的成员函数中,但这是他们明确否认的,所以我的下一个想法是它可能“有点”像 scala 隐式。
斯卡拉 :
object IntExtensions{
implicit Class SquareableInt(i:Int){
def square = i*i
}
}
用法:
import IntExtensions._
进而
println(f"${20.square}")
文档:

An implicit class is desugared into a class and implicit method pairing, where the implciit method mimics the constructor of the class.

The generated implicit method will have the same name as the implicit class.


但是 scala 隐式创建了一个新类,这将禁用 this 的使用.
那么...... Kotlin 是如何扩展类的呢? “使可调用”并没有告诉我太多。

最佳答案

在您的情况下,Kotlin 只需创建名称为“filename”Kt 和静态方法“ int square(int x)”的简单 utils 类(java 伪代码)

从Java看起来像这样

// filename int-utils.kt
final class IntUtilsKt {
public static int square(int x) {
return x * x;
}
}

在这之后所有的呼吁

val 结果 = 20.square()

将(在字节码级别)转换为

验证结果 = IntUtilsKt.square(20);

附言
您可以使用 IDEA 操作“显示 Kotlin 字节码”自己查看

关于scala - Kotlin 的扩展函数是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46362158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com