访问被隐藏的接收器
Access a shadowed receiver
我想将某个接收器上的 Kotlin 扩展函数 class Receiver
与 arrow-kt 的任一理解相结合。在常规的 Kotlin 扩展函数中,this
绑定到接收者对象;但是,任一理解 EitherEffect
都会影响接收者 this
:
suspend fun Receiver.myFun(param: String): Either<Throwable, String> = either {
this.someMethod(...).bind() // Cannot access Receiver.someMethod, <this> is bound to EitherEffect
...
}
如何在箭头的任一个理解块(或任何其他单子理解块)中访问接收者上下文?
这是一个继承自 Kotlin 的问题,但您始终可以通过按名称引用来访问外部作用域 this
。在这里,您可以通过 this@myFun
.
引用来访问 Receiver
suspend fun Receiver.myFun(param: String): Either<Throwable, String> = either {
this@myFun.someMethod(...).bind() // Cannot access Receiver.someMethod, <this> is bound to EitherEffect
...
}
但是,您应该可以在此处简单地调用 someMethod
而无需引用 this
。
suspend fun Receiver.myFun(param: String): Either<Throwable, String> = either {
someMethod(...).bind()
...
}
希望能解决您的问题。
我想将某个接收器上的 Kotlin 扩展函数 class Receiver
与 arrow-kt 的任一理解相结合。在常规的 Kotlin 扩展函数中,this
绑定到接收者对象;但是,任一理解 EitherEffect
都会影响接收者 this
:
suspend fun Receiver.myFun(param: String): Either<Throwable, String> = either {
this.someMethod(...).bind() // Cannot access Receiver.someMethod, <this> is bound to EitherEffect
...
}
如何在箭头的任一个理解块(或任何其他单子理解块)中访问接收者上下文?
这是一个继承自 Kotlin 的问题,但您始终可以通过按名称引用来访问外部作用域 this
。在这里,您可以通过 this@myFun
.
Receiver
suspend fun Receiver.myFun(param: String): Either<Throwable, String> = either {
this@myFun.someMethod(...).bind() // Cannot access Receiver.someMethod, <this> is bound to EitherEffect
...
}
但是,您应该可以在此处简单地调用 someMethod
而无需引用 this
。
suspend fun Receiver.myFun(param: String): Either<Throwable, String> = either {
someMethod(...).bind()
...
}
希望能解决您的问题。