Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 使用接收器';lambda中的s中缀函数(用于DSL)_Kotlin - Fatal编程技术网

Kotlin 使用接收器';lambda中的s中缀函数(用于DSL)

Kotlin 使用接收器';lambda中的s中缀函数(用于DSL),kotlin,Kotlin,我正在使用Kotlin创建一个DSL,我希望利用一个带有中缀函数的receiver对象来获得groovy DSL的感觉。我将从下面的语法示例开始: MyDSL函数{myReceiversInfixFunc“某些字符串”} 我实现这一目标的计划如下: fun myDslFunction(builderFunction: MyReceiverObject.() -> Unit) { val receiver = MyReceiverObject() builderFunctio

我正在使用Kotlin创建一个DSL,我希望利用一个带有中缀函数的receiver对象来获得groovy DSL的感觉。我将从下面的语法示例开始:

MyDSL函数{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约定来帮助实现这一点,我不会感到惊讶…

您无法实现这种语法,因为Kotlin只支持显式指定接收方的
中缀
函数调用:
此MyReceiveSinfixFunc“someString”

此语法有一个(非常旧的)语言功能请求: