假设我想要一个提供square
方法的整数。
科特林:
fun Int.square() = this * this
用法:
println("${20.square()}")
文档:
扩展实际上并不修改它们扩展的类。通过定义扩展,您不会将新成员插入到类中,而只是使新函数可以使用这种类型的变量的点符号调用。
我们想强调的是扩展函数是静态调度的
我的期望是他们只是在编译期间将它添加到扩展类的成员函数中,但这是他们明确否认的,所以我的下一个想法是它可能“有点”像 scala 隐式。
斯卡拉:
object IntExtensions{
implicit Class SquareableInt(i:Int){
def square = i*i
}
}
用法:
import IntExtensions._
进而
println(f"${20.square}")
文档:
隐式类被分解为类和隐式方法配对,其中隐式方法模仿类的构造函数。
生成的隐式方法将与隐式类具有相同的名称。
但是 scala 隐式创建了一个新类,这将禁用this
.
那么...... Kotlin 是如何扩展类的呢?“使可调用”并没有告诉我太多。