Я пытаюсь обернуть голову вокруг функциональных литералов в Kotlin и столкнулся с некоторым поведением, которое я не понимаю.
Следующий код (с использованием 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, но я не понимаю, в чем проблема.Может кто-нибудь помочь?