如何返回包含其他lambda的lambda



我有值的映射。我需要为某些类型强制转换Any,然后调用函数send()

fun mapToMessage(map: Map<String, Any>?): (Meesage.() -> Unit)? {
if (map.isNullOrEmpty()) {
return null
}
map.forEach { (key, value) ->
when (value) {
is String -> return { send(key, value) }
is Int -> return { send(key, value)}
}
}
}

函数mapToMessage()应该返回类似于lambda的:

{
send(key1, value1)
send(key2, value2)
}

但现在只返回一个单位。如何创建包含映射中所有单元的lambda?

您可以选择返回一个lambda,该lambda遍历Map并调用以下函数:

fun mapToMessage(map: Map<String, Any>?): (Meesage.() -> Unit)? {
if (map.isNullOrEmpty()) {
return null
}
return {
map.forEach { (key, value) ->
when (value) {
is String -> send(key, value)
is Int -> send(key, value)
}
}
}
}

您是否试图返回一个包含所有其他lambda的lambda,并在调用时运行它们?

val lambdas = map.mapNotNull { (key, value) ->
when (value) {
is String -> { send(key, value) }
is Int -> { send(key, value)}
else -> null
}
}
return { lambdas.forEach { it.invoke() } }

将它们称为单位有点令人困惑。CCD_ 4是一种;什么都没有";return value-函数返回的类型是Meesage.() -> Unit,这是一个不返回值的函数。没有";有多少"-这将是一个值,所以它不会是Unit