私はKotlinを使ってDSLを作成していますが、インライン関数を持つ受信機オブジェクトを利用して、これを達成するための私の計画は、このコードだったlambda(DSLの場合)の受信機のインフィックス関数を使用
myDslFunction {myReceiversInfixFunc "いくつかの文字列"}
:私は後に私は、構文の例から始めます
fun myDslFunction(builderFunction: MyReceiverObject.() -> Unit) {
val receiver = MyReceiverObject()
builderFunction(receiver)
// do something with receiver
}
class MyReceiverObject {
infix fun myReceiversInfixFunc(someString: String) {
// do something with someString
}
}
上記の関数とクラススニペットはうまくコンパイルされますが、上記のDSL構文はそうではありません。
fun test() {
// desired syntax
myDslFunction {
myReceiversInfixFunc "some string" // doesn't compile
}
// not-desired syntax that compiles and works...
myDslFunction {
this myReceiversInfixFunc "some string" // does compile
}
}
ここでの主な違いは、セットアップにthis
キーワードの追加は中置記法であるが、私はそれが望ましくないことをお勧めし、使用の目的に反し:ここで私は、コンパイルをテストするために書いたいくつかのテスト機能がありますレシーバオブジェクト
ここには何かがありますか?私は希望の構文を達成することはできますか?これを行うのを助けるためにKotlinのコンベンションを見落としているなら私は驚かないでしょう...