【发布时间】:2017-09-22 10:08:58
【问题描述】:
假设我想要一个提供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 扩展类是怎么回事? “使可调用”并没有告诉我太多。
【问题讨论】:
标签: scala compilation kotlin implicit kotlin-extension