2

我有以下情况,一个名为savefromMarker

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.问题

要使用Markerinsidesave方法的实例,我需要 use this@save,但这个名称并不具有暗示性,乍一看,它看起来不像Marker.

3.问题

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

非常感谢!

4

3 回答 3

7

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

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)
    }
}
于 2018-07-18T18:20:30.807 回答
0

非常感谢@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)
    }
}

我为此感到尴尬,但我继续提出问题以支持另一位开发人员。谢谢大家!

于 2018-07-18T19:34:44.540 回答
-1

.let是一个选项:

fun Marker.save() = this.let { marker ->
    ctx.database.use {
      insert("markers",
        "id" to marker.id,
        // etc
      )
    }
}
于 2022-01-12T13:39:44.540 回答