在 kotlin 上从 this@ 更改名称

Change name from this@ on kotlin

我有以下情况,一个名为 save 的扩展函数来自 Marker

1.代码

fun Marker.save(ctx: Context) {
    //database is an extension property from Context
    ctx.database.use {
        insert("markers",
                "id" to this@save.id,
                "latitude" to this@save.position.latitude,
                "longitude" to this@save.position.longitude,
                "name" to this@save.title)
    }
}

代码对我来说工作正常。

2。问题

要在 save 方法中使用 Marker 的实例,我需要使用 this@save,但这个名称不是暗示性的,在第一眼看来,它不像 Marker.

3。问题

是否可以应用别名来代替 this@save?

非常感谢!

您可以只保存对命名良好的局部变量的引用:

fun Marker.save(ctx: Context) {
    val marker = this
    //database is an extension property from Context
    ctx.database.use {
        insert("markers",
                "id" to marker.id,
                "latitude" to marker.position.latitude,
                "longitude" to marker.position.longitude,
                "name" to marker.title)
    }
}

非常感谢@zsmb13 的支持,但我需要用我自己的答案来回答,因为我们所做的一切都是不必要的,只需使用 属性 本身,没有任何前缀,看这个:

fun Marker.save(ctx: Context) {
    //database is an extension property from Context
    ctx.database.use {
        insert("markers",
                "id" to id, //without any prefix
                "latitude" to position.latitude,
                "longitude" to position.longitude,
                "name" to title)
    }
}

我为此感到尴尬,但我会保留我的问题以支持另一位开发人员。谢谢大家!

.let是一个选项:

fun Marker.save() = this.let { marker ->
    ctx.database.use {
      insert("markers",
        "id" to marker.id,
        // etc
      )
    }
}