在 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
)
}
}
我有以下情况,一个名为 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
)
}
}