我正在通过Kotlin Koans工作并遇到这种类型的不匹配。我知道这个问题有其他解决办法,但我想知道我做错了什么。
基本问题似乎是我通过Product
生成一组flatMap
val allOrderedProducts = customers.flatMap {it.orders.flatMap {it.products}}.toSet()
然后我用它作为折叠的接收器
allOrderedProducts.fold(products) { theList, theProduct -> { ... } }
theProduct
的推断类型为() -> Product
而不是Product
这是我得到类型不匹配的实际函数(它不是完成,而只是语法正确到足以显示类型不匹配)
有人可以解释为什么这不起作用?
// Return the set of products that were ordered by every customer
fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
val products: Set<Product> = setOf()
val allOrderedProducts = customers.flatMap {it.orders.flatMap {it.products}}.toSet()
allOrderedProducts.fold(products) { theList, theProduct ->
customers.all { customer ->
val orderedProducts = customer.orders.flatMap { it.products }
orderedProducts.contains { theProduct } // type mismatch inferred type is () -> Product but Product was expected
}
val ret: Set<Product> = setOf()
ret
}
val retValue: Set<Product> = setOf()
return retValue
}
答案 0 :(得分:0)
(免责声明我根本不是Kotlin专家)
这似乎是一个简单的语法错误;这一行:
orderedProducts.contains { theProduct }
应该是
orderedProducts.contains(theProduct)
(将花括号替换为&#34;普通&#34;大括号)