为什么Android开发人员的Kotlin(书)需要再次添加扩展parseList?

我知道Anko提供的函数parseSingle,parseOpt和parseList,我不明白为什么Android开发人员(书)的代码需要再次设计扩展parseList。

你可以告诉我吗? 谢谢!

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt

override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use { val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?" val dailyForecast = select(DayForecastTable.NAME) .whereSimple(dailyRequest, zipCode.toString(), date.toString()) .parseList { DayForecast(HashMap(it)) } } 

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt

 fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> = parseList(object : MapRowParser<T> { override fun parseRow(columns: Map<String, Any?>): T = parser(columns) }) 

parseListparseList需要一个MapRowParser ,而不是一个函数。 这简化了使用。 随着Anko版本,你会写

 .parseList { mapRowParser { DayForecast(HashMap(it)) } } 

代替。 这是假设有一个像mapRowParser构造函数,我不能在他们的来源找到; 否则,你可以写得相当平凡。

或者说,它已经在示例代码中为您写了,而不是作为一个单独的函数:

 fun <T> mapRowParser(parser: (Map<String, Any?>) -> T): MapRowParser<T> = object : MapRowParser<T> { override fun parseRow(columns: Map<String, Any?>): T = parser(columns) } 

我真的很惊讶,如果这个函数不存在(也许被称为别的东西,但什么?)。 OTOH,如果它确实存在,Leiva应该使用它。