私はsquare
メソッドを提供する整数が欲しいとしましょう。Kotlinの拡張機能はどのように機能しますか?
Kotlin:
fun Int.square() = this * this
用法:
println("${20.square()}")
DOC:
拡張機能は、実際に彼らは拡張するクラスを変更しないでください。拡張を定義することによって、クラスに新しいメンバを挿入するのではなく、この型の変数にドット表記で呼び出すことのできる新しい関数を作成するだけです。
私たちは、その拡張子を強調したい機能を静的に
派遣されている私の期待は、彼らは単にコンパイル時に拡張されたクラスのメンバ関数に追加することをしてきただろうが、それは彼らが明示的に否定するものですだから私の次の考えは、それがスカラ・インプリシットのような「ある種の」ものになる可能性があるということでした。
スカラ:
object IntExtensions{
implicit Class SquareableInt(i:Int){
def square = i*i
}
}
使用:
import IntExtensions._
、次いで
println(f"${20.square}")
DOC:
暗黙的なクラスは、クラスと暗黙的なメソッドのペアになっています。implciitメソッドは、そのクラスのコンストラクタを模倣しています。
生成された暗黙のメソッドは、暗黙のクラスと同じ名前になります。
しかし、scala implicitsは新しいクラスを作成するため、this
の使用が無効になります。
だから...どのようにそれはKotlinがクラスを拡張するのですか? 「呼び出し可能にする」とは私にはあまり言いません。