在 Kotlin 中返回临时对象的函数
Function returning ad-hoc object in Kotlin
目前我有一个私有函数,它 return 是一个 Pair<User, User>
对象。第一个用户是东西的发送者,第二个用户是那个东西的接收者。
我认为这个 Pair<User, User>
不够自我解释 - 或者如果你愿意的话也很干净 - 即使它只是一个私有函数。
是否可以 return 使用这样的临时对象:
private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Any {
return object {
val sender = userCrud.findOne(instanceWrapper.fromWho)
val receiver = userCrud.findOne(instanceWrapper.toWho)
}
}
并像这样使用 returned 值:
// ...
val users = findUsers(instanceWrapper)
users.sender // ...
users.receiver // ...
// ...
?
如果不是,Kotlin 中的临时对象有什么意义?
由于语言无法表示类型,使用return类型推断:
class Example {
private fun findUsers(instanceWrapper: ExceptionInstanceWrapper) =
object {
val sender = userCrud.findOne(instanceWrapper.fromWho)
val receiver = userCrud.findOne(instanceWrapper.toWho)
}
fun foo() = findUsers(ExceptionInstanceWrapper()).sender
}
另一种选择是设计一个数据 class:
class Example {
private data class Users(val sender: User, val receiver: User)
private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Users {
return Users(
sender = userCrud.findOne(instanceWrapper.fromWho),
receiver = userCrud.findOne(instanceWrapper.toWho)
)
}
fun foo() = findUsers(ExceptionInstanceWrapper()).sender
}
只需将函数定义为 lambda。
这是我刚刚在另一个上下文中作为示例编写的简单对象:
private val Map = {
val data = IntArray(400)
for (index in data.indices) {
data[index] = index * 3
}
object {
val get = { x: Int, y: Int ->
data[y * 20 + x]
}
}
}
fun main() {
val map = Map()
println(map.get(12,1))
}
不幸的是,您不能分配类型名称,因此它可以用作 return 值但不能用作参数。也许他们会让这成为可能,所以我们最终可以做 OOP JS 风格。
或者,他们可以实现等同于函数类型的对象类型,但最终可能过于冗长。然后你可以做一个 typedef 但那实际上只是一种 class 定义
目前我有一个私有函数,它 return 是一个 Pair<User, User>
对象。第一个用户是东西的发送者,第二个用户是那个东西的接收者。
我认为这个 Pair<User, User>
不够自我解释 - 或者如果你愿意的话也很干净 - 即使它只是一个私有函数。
是否可以 return 使用这样的临时对象:
private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Any {
return object {
val sender = userCrud.findOne(instanceWrapper.fromWho)
val receiver = userCrud.findOne(instanceWrapper.toWho)
}
}
并像这样使用 returned 值:
// ...
val users = findUsers(instanceWrapper)
users.sender // ...
users.receiver // ...
// ...
?
如果不是,Kotlin 中的临时对象有什么意义?
由于语言无法表示类型,使用return类型推断:
class Example {
private fun findUsers(instanceWrapper: ExceptionInstanceWrapper) =
object {
val sender = userCrud.findOne(instanceWrapper.fromWho)
val receiver = userCrud.findOne(instanceWrapper.toWho)
}
fun foo() = findUsers(ExceptionInstanceWrapper()).sender
}
另一种选择是设计一个数据 class:
class Example {
private data class Users(val sender: User, val receiver: User)
private fun findUsers(instanceWrapper: ExceptionInstanceWrapper): Users {
return Users(
sender = userCrud.findOne(instanceWrapper.fromWho),
receiver = userCrud.findOne(instanceWrapper.toWho)
)
}
fun foo() = findUsers(ExceptionInstanceWrapper()).sender
}
只需将函数定义为 lambda。
这是我刚刚在另一个上下文中作为示例编写的简单对象:
private val Map = {
val data = IntArray(400)
for (index in data.indices) {
data[index] = index * 3
}
object {
val get = { x: Int, y: Int ->
data[y * 20 + x]
}
}
}
fun main() {
val map = Map()
println(map.get(12,1))
}
不幸的是,您不能分配类型名称,因此它可以用作 return 值但不能用作参数。也许他们会让这成为可能,所以我们最终可以做 OOP JS 风格。
或者,他们可以实现等同于函数类型的对象类型,但最终可能过于冗长。然后你可以做一个 typedef 但那实际上只是一种 class 定义