访问被隐藏的接收器

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()
  ...
}

希望能解决您的问题。