Jetpack Compose中Composable函数调用里的`it`来源疑问
解答:Lambda中
it的来源分析 首先结合Rally示例的逻辑,先明确OverviewScreenCard这个泛型Composable的核心函数签名:
@Composable fun <T> OverviewScreenCard( items: List<T>, // 接收T类型参数、返回Color的Lambda colors: (T) -> Color, // 接收T类型参数、返回Float的Lambda values: (T) -> Float, // 其他UI相关参数... ) { // 内部逻辑会遍历传入的items列表 items.forEach { item -> // 对每个item,调用colors和values Lambda获取对应值 val itemColor = colors(item) val itemValue = values(item) // 基于这些值渲染卡片UI } }
当AccountsCard调用它时,传入的items是Account类型的列表,此时泛型T会被自动推断为Account类型。
你疑惑的colors = {it.color}和values = {it.balance}里的it,是Kotlin简化Lambda的隐式参数——因为你没有显式声明Lambda的参数名,Kotlin会默认用it指代这个Lambda的唯一参数。而这个参数的类型就是泛型T(也就是Account),所以it在这里指代的是OverviewScreenCard内部遍历items列表时的每一个Account实例。
举个直白的等价写法对比:
你能理解的forEach显式参数写法:
accounts.forEach { account -> // account就是遍历到的单个Account实例 }
而colors = {it.color}本质等于:
colors = { account -> account.color }
只是用了Kotlin的简化语法,把参数名换成了默认的it。
内容的提问来源于stack exchange,提问作者Jan Peters
相关产品推荐
相关产品推荐

