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/7/arduino/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 在多个接收器上调用公共方法_Kotlin - Fatal编程技术网

Kotlin 在多个接收器上调用公共方法

Kotlin 在多个接收器上调用公共方法,kotlin,Kotlin,通常,我有以下模式: a.x() a.y() a.z() Kotlin提供了一个方便的替代方案: a.run { x(); y(); z() } 有时我有这样一种模式: a.x() b.x() c.x() applyTo(a, b, c) { it.x() } ::x.eachOf(a, b, c) 我想写这样的东西: a.x() b.x() c.x() applyTo(a, b, c) { it.x() } ::x.eachOf(a, b, c) 因此,我可以实现以下功能: f

通常,我有以下模式:

a.x()
a.y()
a.z()
Kotlin提供了一个方便的替代方案:

a.run { x(); y(); z() }
有时我有这样一种模式:

a.x()
b.x()
c.x()
applyTo(a, b, c) { it.x() }
::x.eachOf(a, b, c)
我想写这样的东西:

a.x()
b.x()
c.x()
applyTo(a, b, c) { it.x() }
::x.eachOf(a, b, c)
因此,我可以实现以下功能:

fun <P> applyTo(vararg ps: P, fx: (P) -> Unit) = ps.forEach { fx(it) }
因此,我可以实现以下功能:

fun <P, R> ((P) -> R).eachOf(vararg p: P) = p.forEach { this(it) }
fun((P)->R).eachOf(vararg P:P)=P.forEach{this(it)}
有没有一种方法可以使用标准库在多个接收器上调用共享方法,或者有更好的方法来缩短模式#2?

只需使用一个列表:

listOf(a, b, c).forEach { it.x() }

我想你的
a,b,c
是同一类型的。您可以将
应用程序修改为
以接受,并使调用看起来像在
运行中一样:

fun <P> applyTo(vararg ps: P, fx: P.() -> Unit) = ps.forEach { it.fx() }
//call without it.x()
applyTo(a, b, c) { x() }
fun

applyTo(vararg ps:P,fx:P.()->Unit)=ps.forEach{it.fx()} //没有它的调用。x() 应用于(a,b,c){x()}


您的第二个解决方案很有趣,但不太可读。不会这样做。

a、b、c是相同的类型吗?是的,或者至少它们共享一个接口。
listOf
是我的第一个猜测,可能是最好的一个。我希望Kotlin有集合文字。所有这些额外的仪式只是为了避免额外的六个角色。谢谢
所有这些额外的仪式只是为了避免额外的六个字符
当我看到一种带有集合文字的语言时,我就是这么想的:)它们来了(集合文字)。。。1.2为注释中的数组介绍了它们,并做了一些幕后工作,为一般介绍做准备。