Android kotlin with函数学习

本文探讨了Kotlin中的with函数,通过源码解析和实例演示如何使用它。with函数接受一个对象和一个lambda表达式,允许在表达式内部通过this引用对象,简化代码并避免重复的对象引用。示例中展示了如何利用with函数修改Person对象的属性,无需明确指定对象名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天来学习一下kotlin中with函数,首先看一下他的源码:

/**
 * Calls the specified function [block] with the given [receiver] as its receiver and returns its result.
 *
 * For detailed usage information see the documentation for [scope functions](https://kotlinlang.org/docs/reference/scope-functions.html#with).
 */
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return receiver.block()
}

    with函数是将某对象作为函数的参数,在函数块内可以通过 this 指代该对象。返回值为函数块的最后一行或指定return表达式。可以看出with函数是接收了两个参数,分别为T类型的对象receiver和一个lambda函数块。是不是有点难于理解,没事,下面以一个实例来深入了解一下:

    首先,我们定义一个数据类Person

data class Person(var name: String, var age: String)

    然后,实例化一个Person,给他设置name为张三,age为23,最后我们把张三改名为王五,年龄25,看一下实现:

 var person = Person("张三", "23")

 with(person) {
    name = "王五"
    age = "25"
 }
 println(person)

    打印出来的结果:

Person(name=王五, age=25)

    由此,我们分析一下,在with函数中,我们把person传入,然后在with的第二个函数参数中,修改这个传入的person的值,而且我们并没有在name或者age前加上前缀,在这里,可以理解为,我们是写的this.name,只是把this省略了。(只是先粗略这么理解)

    文章若有错漏,还请指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值