Изменить имя с этого @ на 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. Вопрос

Чтобы использовать экземпляр Marker внутри save метод мне нужно использовать this@save, но это имя не является обязательным, на первый взгляд, оно не выглядит как Marker,

3. Вопрос

Возможно использовать вместо этого псевдоним this@save?

Большое спасибо!

3 ответа

Решение

Вы можете просто сохранить ссылку на локальную переменную с хорошим именем:

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

Я смутился из-за этого, но я продолжаю держать вопрос, чтобы поддержать другого разработчика. Спасибо всем!

вариант:

      fun Marker.save() = this.let { marker ->
    ctx.database.use {
      insert("markers",
        "id" to marker.id,
        // etc
      )
    }
}
Другие вопросы по тегам