Kotlin有方法CALL标签吗?

我正在从Swift搬到Kotlin,到目前为止都非常喜欢它。 但是,我习惯于像这样声明方法(假装引用的方法存在并工作):

// Swift method declaration func drawCircle(inRect rect: CGRect, antialiased: Bool) { super.antialiased = antialiased super.drawCircle(inRect: rect) } 

并像这样称呼他们:

 drawCircle(inRect:myRect, antialiased: false) 

这是美丽的自我记录和读取像英文。 但是,在Kotlin中,类似这样的方法:

 fun drawCircle(inRect: Rectangle, antialiased: Boolean) { super.antialiased = antialiased super.drawCircle(inRect) } 

使用名为inRect的变量已经开始听起来很奇怪。 但是当我打电话的时候情况会变得更糟:

 drawCircle(myRect, false) 

在这里我们看到最大的问题:通过单独阅读这一行,可以猜测myRect是一个矩形,圆圈将被绘制。 但是,这是true吗? 这可能是反锯齿的,是的,但也可能是不透明的绘制,还是一些关于是否绘制它的切换! 无论如何,我可以举出更多的理由,为什么Swift和Objective-C程序员用方法调用来爱他们的标签,但是我已经说明了我的观点。

有什么办法可以在Kotlin的方法调用上启用标签吗?

据我所知,没有编译器选项强制这个语法,但你仍然可以在你的代码中使用它,请参阅文档: 命名参数 。

简而言之,你的函数的语法是

 drawCircle(inRect = myRect, antialiased = false) 

您甚至可以使用命名参数在调用中更改函数参数顺序。

 drawCircle(antialiased = false, inRect = myRect) 

限制是:

  • 你不能用这个语法调用Java方法,因为Java字节码并不总是保存参数名称;

  • 混合定位(未命名)和命名参数是有限的:所有命名的参数应该在定位的后面:

     fun f(x: Int, y: Int, z: Int) = 0 f(x = 0, y = 0, z = 0) // OK f(0, y = 0, z = 0) // OK f(0, z = 0, y = 0) // OK f(x = 0, 0, 0) // Error 
Interesting Posts