=INDEX(D1:E4,MATCH(TRUE,ISNUMBER(SEARCH(A2,D1:D4)),0),MATCH("text to return",D1:E1,0))
对于上面的kotlin函数,我的问题顺序从内部块代码到外部块:
1. fun theItemDTO.toDomainModel(
domainOrderId: String,
pIds: List<Long> = emptyList()
): theItem = let { dto ->
OrderProtoBuilders.theItem {
this.id = dto.id.toString()
skuId = dto.catalogEntryId.toString()
orderId = domainOrderId
quantity = dto.quantity
unitPrice = dto.unitPrice
totalPrice = dto.totalPrice
price = null
for (pId in pIds)
addpId(pId.toString())
dto.someMap[MAP_A]
?.let(::setAId)
dto.someMap[MAP_B]
?.let(::setBId)
}
}
在做什么?它看起来像是dto.someMap[MAP_A]
?.let(::setAId)
的重新分配,但也声明了someMap[MAP_A]
的某些内容……它在做什么?
let
包装器的含义与{
相同。正确?因为我确实读过return
,所以就像自动返回值的函数。那么->
的最终值真的是...: theItem
创建的内容吗?OrderProtoBuilders.theItem {...
答案 0 :(得分:2)
dto.someMap[MAP_A]?.let(::setAId)
可以像val value = dto.someMap[MAP_A]
if (value != null) {
setAId(value)
}
2。 是的,这是正确的。你可以这样想
//the whole function will return item created by OrderProtoBuilders.theItem
fun theItemDTO.toDomainModel(
domainOrderId: String,
pIds: List<Long> = emptyList()
): theItem = let { dto ->
//return OrderProtoBuilders.theItem
OrderProtoBuilders.theItem {
//do some additional initialization of the Item
}
}