Изменить имя с этого @ на 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
)
}
}