具有接收器和链接方法的Kotlin函数文字

时间:2018-11-24 13:30:10

标签: kotlin

我正在努力把Kotlin中的Function Literals包裹起来,并且遇到了一些我不了解的行为。

以下代码(使用JodaTime)将产生2017-11-24T00:00:00.000Z'的预期结果

val dateTime = DateTime()
val withTimeAtStartOfDay = dateTime
        .minusYears(1)
        .withTimeAtStartOfDay()

println(withTimeAtStartOfDay.toString())

为了尝试在DSL中复制它,我创建了以下功能

inline fun createUtcDate(block: DateTime.() -> DateTime): String {
    val dateTime = DateTime()
    return dateTime.block().toString()
}

使用以下代码调用此函数将产生“ 2018-11-24T00:00:00.000Z”的结果,如您所见,其中仅应用对withTimeAtStartOfDay()的调用。

val utcDate = createUtcDate {
    minusYears(1)
    withTimeAtStartOfDay()
}
println(utcDate)

我假设这与对DateTime对象的方法调用的链接有关,但不了解问题所在。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我认为您的原始图片更清晰易读。而且,如果您一个月后回来,则可以添加另一行而不必担心。为此,您需要做的是:

inline fun createUtcDate(block: DateTime.() -> Unit): String {
    val dateTime = DateTime()
    dateTime.apply(block)
    return dateTime.toString()
}