我有一个像这样的功能:
private fun Logging.ILoggingEvent.populateLoggingEvent(eventId: String, data: MutableMap<String, String?> = mutableMapOf()) =
LoggingEventData(
eventId = eventId,
eventName = "LoggingEvent_$eventId",
data = data
)
尽管:
data class LoggingEventData(
val eventId: String,
val eventName: String,
val data: MutableMap<String, String?>,
)
和
interface ILoggingEvent {
val timeStamp: Instant
fun updateTimeStamp(now: Instant) {
timeStamp = now
}
}
为什么我不能将上部populateLoggingEvent()
函数转换为括号:
private fun Logging.ILoggingEvent.populateLoggingEvent(eventId: String, data: MutableMap<String, String?> = mutableMapOf()) {
LoggingEventData(
eventId = eventId,
eventName = "LoggingEvent_$eventId",
data = data
)
}
当函数声明具有以下形式时
fun f() = expression
,它表示它是一个返回f
的函数。expression
要使用块作为函数体重写此代码,您需要
return
语句。这意味着
: LoggingEventData
在 之前添加{ ... }
,并return
在 之前添加LoggingEventData(...)
。事实上,在 IntelliJ 中,表达式体函数和块体函数之间的转换可以作为上下文操作来实现。右键单击表达式并选择“显示上下文操作”(或在 macOS 上按 Cmd+Enter),然后选择“转换为块体”。
在您的尝试中,该函数没有返回类型,因此它成为一个-returning 函数。主体中的
Unit
表达式只是创建一个,然后将其丢弃。LoggingEventData(...)
LoggingEventData
另请参阅文档。