Kotlin型mistmatch() - > SomeType vs SomeType

时间:2015-12-06 15:54:10

标签: kotlin

我正在通过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
}

1 个答案:

答案 0 :(得分:0)

(免责声明我根本不是Kotlin专家)

这似乎是一个简单的语法错误;这一行:

 orderedProducts.contains { theProduct }  

应该是

 orderedProducts.contains(theProduct)

(将花括号替换为&#34;普通&#34;大括号)