Kotlin with 、apply等函数的使用场景总结

Kotlin 中的 with 函数简介 阅读详情

1. with

定义:fun <T, R> with(receiver: T, block: T.() -> R): R

功能:将对象作为函数的参数,在函数内可以通过 this指代该对象。返回值为函数的最后一行或return表达式。

实例:1.在自定义view中当我们初始化画笔时很多时候我们会写下边的代码

    var paint = Paint()
    paint.color = Color.BLACK
    paint.strokeWidth = 1.0f
    paint.textSize = 18.0f
    paint.isAntiAlias = true

如果使用with,那么就可以写成这样

var paint = Paint()
with(paint) {
        color = Color.BLACK
        strokeWidth = 1.0f
        textSize = 18.0f
        isAntiAlias = true
    }

省去了paint.后书写起来感觉会更加自然2.在声明一些集合的场景比如:

    var list= mutableListOf<String>()
    list.add("1")
    list.add("2")
    list.add("3")

使用with可以写成

var list = with(mutableListOf<String>()) {
        add("1")
        add("2")
        add("3")
        this
    }

开发中还有很多场景可以使用with功能,理解了with的功能也就能够灵活运用了。

2. takeIf和takeUnless

takeif

定义:fun T.takeIf(predicate: (T) -> Boolean): T?

功能:传递一个函数参数,如果函数结果为true,返回T对象,否则返回null。

实例:使用File文件时通常会判断file是否存在,比如

   var file = File("filePath")
    if (file.exists()) {
        //do something
    } else {
        return false
    }

使用takeif后

var file = File("filePath").takeIf { it.exists() }?:return false
//do something

takeUnless

定义:fun T.takeUnless(predicate: (T) -> Boolean): T?

功能:与takeIf相反,参数函数返回false时返回T对象,否则返回null,这里不再举例。

3. run

定义:

(1)fun run(block: () -> R): R(2)fun <T, R> T.run(block: T.() -> R): R

功能:调用run函数返回值为函数体最后一行,或return表达式。

实例:返回最后一行

kotlin.run {
    println("11")
    println("22")
}

结果:

I/System.out: 11

I/System.out: 22

返回return表达式,return后面的代码不再执行(注意写法@run)

kotlin.run {
        return@run println("11")
        println("22")
    }

结果:I/System.out: 11

4. repeat

定义:fun repeat(times: Int, action: (Int) -> Unit)

功能:重复执行action函数times次,times从0开始

实例:与for循环功能类似,例如

repeat(5){ println("count:$it") }

等价于

for (i in 0..4) { println("count:$i") }

或者

(0..4).forEach{println("count:$it")}

5. let

定义:fun <T, R> T.let(block: (T) -> R): R

功能:调用对象(T)的let函数,则该对象为函数的参数。在函数内可以通过 it 指代该对象。返回值为函数的最后一行或指定return表达式。

实例:有点类似于run(),let在使用中可用于空安全验证,变量?.let{}例如

val data = ……
data?.let {
…… // 假如data不为null,代码会执行到此处
}

6. apply

定义:fun T.apply(block: T.() -> Unit): T

功能:调用对象的apply函数,在函数范围内,可以任意调用该对象的任意方法,并返回该对象。

实例:

var list = mutableListOf<Int>().apply {
    add(1)
    add(2)
    add(3)
}

注意他和run函数的区别,run返回的是最后一行,apply返回的是对象本身,由apply函数的定义我们可以看出apply适用于那些对象初始化需要给其属性赋值的情况。还是用画笔的例子

原始的

    var paint = Paint()
    paint.textSize = 14.0f
    paint.color = Color.WHITE
    paint.isAntiAlias = false

使用apply后

    var paint = Paint().apply {
        textSize = 14.0f
        color = Color.WHITE
        isAntiAlias = false
    }

此外由于apply函数返回的是其对象本身,那么可以配合?.完成多级的非空判断操作,或者用于建造者模式的Builder中

7. also

定义:fun T.also(block: (T) -> Unit): T

功能:调用对象的also函数,在函数块内可以通过 it指代该对象,返回值为该对象本身。(注意其和let函数的区别,let返回的是最后一行,also返回的是对象本身)


Kotlin作用域函数--let、with、run、apply、also 我最近从朋友那里收集到了2020-2021BAT 面试真题解析Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题等等,可以很好地帮助大家深刻理解Android相关知识点的原理以及面试相关知识。这份资料把大厂面试中常被问到的技术点整理成了PDF,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。这里也分享给广大面试同胞们,希望每位程序猿们都能面试成功~ 阅读详情

相关推荐

Kotlin 作用域函数详解:apply、also、run、let、with 的核心区别与使用场景(内置记忆口诀版)

Kotlin作用域函数(apply/also/run/let/with)的核心区别与使用指南: apply/also返回对象本身,用于配置和附加操作;let/run返回计算结果,用于转换和逻辑处理 apply/run使用隐式this,适合对象属性操作;also/let使用显式it,避免歧义 空安全处理优先?.let或?.run 记忆口诀:"配自己用apply,加操作选also;空安全找let,计算混用run;with显式传对象" 所有函数均为inline,无运行时性能开销

左耳的专栏 829

Kotlin - 标准函数(with、run和apply)

Kotlin的标准函数是指 Standard.kt 文件中定义的函数,描述了最常用的apply、with、run函数

m0_63970488的博客 3254

Kotlin 的作用域函数:apply、let、also、run,以及 with、takeIf 和 takeUnless。函数的用法和使用场景

掌握作用域函数对于编写符合 Kotlin 习惯的代码至关重要。理解 lambda 表达式中 this 和 it 之间的区别。注意返回值。选择最能表达你意图的函数。

奋斗小强的博客 1471

kotlin之with函数

with()函数中的参数是一个对象,我们可以在方法中直接引用对象的公有属性或者公有方法,而不用使用方法名。

fynzhy的博客 1041

22、Kotlin 作用域函数:with、run、apply、also 详解

本文详细介绍了 Kotlin 中的作用域函数:`with`、`run`、`apply` 和 `also`,包括它们的使用方式、适用场景以及区别。通过代码示例和深入解析,帮助开发者更好地理解和应用这些函数,提高代码的简洁性和可读性。此外,还介绍了 Kotlin 中的 Elvis 运算符及其用途。

k9l0m1的博客 197

WSL2+Docker+Ollama:解锁Windows本地GPU加速运行DeepSeek-R1模型

本文详细介绍了在Windows系统上,通过WSL2、Docker和Ollama的组合方案,实现本地GPU加速运行DeepSeek-R1模型的全过程。该方案解决了Windows环境下Ollama默认无法调用NVIDIA显卡的痛点,通过配置Docker的GPU支持,强制将计算任务分配给GPU,从而显著提升文本生成速度与效率,为开发者提供了一个便捷的本地AI测试环境。

weixin_28452161的博客 358

Kotlin编程实践-【标准库函数使用场景(let、run、with、apply、also)】

Kotlin 标准库提供了一些非常有用的扩展函数,如 let, run, with, apply, also 等,这些函数通常被用作接收一个对象并以某种方式处理它。它们的主要目的是为了使代码更加简洁和易读。下面来说明这些函数的一些常见使用场景。let:通常用于处理可能为 null 的对象,只有当对象非 null 时才执行某些操作。run:适用于需要返回一个结果的操作,并且可以改变上下文对象的状态。with:通常用于简化代码,避免多次引用同一个对象。

weixin_37799575的博客 790

CAD制图

CAD制图可以提高设计效率和准确性,并方便文档的存档和交流,是现代工程设计中不可或缺的一部分。·CAD三维开发是指使用计算机程序和工具来创建、编辑和操作三维模型、图形和设计的过程。它在工程、建筑、制造和游戏等领域广泛应用。CAD三维开发可能涉及到复杂的图形算法、性能优化、并行计算等方面的内容,因此需要深入学习和实践,以提高开发的效率和质量。

RZer的博客 1655

Kotlin之let,apply,run,with等函数区别2

Kotlin之let,apply,run,with等函数区别2 Kotlin之let,apply,run,with等函数区别2 前提介绍 repeat with let apply run 另一个Run also takeIf takeUnless 总结 示例 以前也总结过Kotlin的一些内置函数let,apply,run,with的区别——地址,后面又增加了also,ta

流水不腐小夏 3840

基于Ventoy制作单个U盘引导Windows+Linux+黑苹果macOS

一款国内高手开发的一个名为Ventoy的开源多系统启动U盘制作工具,官方链接:https://www.ventoy.net/cn/index.html Ventoy 特点 不影响U盘日常普通使用 直接从ISO文件启动,无需解开 支持MBR和GPT分区格式(1.0.15+) 支持超过4GB的ISO文件 支持大部分常见操作系统, 已测试650+ 个ISO文件 不仅仅是启动,而是完整的安装过程 版本升级时数据不会丢失 Ventoy 待改进 不支持macOS和ChromeOS 准备2个空的U.

wybarcelona的博客 3万+

UE4游戏逆向实战:从HOOK明文包到自定义发包的完整流程(附加密算法解析)

本文详细解析了UE4游戏网络通信的逆向工程完整流程。从定位线程发包点、HOOK拦截明文封包,到逆向分析加密解密算法,最终实现自定义组包与加密发送。文章结合实战案例,为游戏安全研究和技术人员提供了一套清晰、可操作的方法论。

weixin_29009081的博客 1237

Kotlin中Standard.kt的函数(let,with,run,apply,also)

内联扩展函数let 1.源码 // block: lambda函数块->lambda表达式的参数是对象T // 返回值:lambda函数块最后一行或指定retur表达式 public inline fun <T, R> T.let(block: (T) -> R): R { // this指当前对象T return block(this) } 2.转成JAVA public final Object let(Object $this$let, @NotNull Funct

Geek的专栏 488

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1878

kotlin作用域函数/内联函数let,with,run,apply,also的使用

判断空 省略 it/this 上下文对象 返回值 let 有 it Lambda result with 可 this Lambda result run 有 可 this Lambda result =let + with 可以省略this,也可以判断空 apply 可 th...

华 英雄 488

使用PaddleOCR识别查验平台验证码

PaddleOCR识别国税查验平台验证码

m0_63932300的博客 1269

提示deepseek生成完整的json用于对接外部API

通过精准的提示词设计(字段过滤、格式约束)、动态验证机制(自检与修正)和官方模板参考,可有效确保DeepSeek生成的JSON纯净无冗余。

神棍之路 2309

kotlin作用域函数:run、let、also、apply、with

Kotlin作用域函数指南:let、run、with、apply和also的区别与应用 Kotlin提供了五种作用域函数(let、run、with、apply、also),它们都能在对象上下文中执行代码块,但各有特点: let和also使用it引用对象,let返回lambda结果,also返回对象本身 run和with使用this引用对象,run返回lambda结果,with是非扩展函数 apply使用this引用对象并返回对象本身 适用场景: let:处理非空对象或局部变量引入 apply:对象配置(属性

Huang兄 1406

026、传感器校准:加速度计校准

本文详细介绍了无人机飞控系统中加速度计的校准方法。作者从一次炸机事故引入,强调加速度计校准的重要性。文章首先解释了加速度计测量原理和误差来源,包括零偏、尺度因子和交叉轴耦合。重点介绍了两种校准方法:六位置法利用重力作为参考,操作简单但精度有限;椭球拟合通过采集大量数据点进行最小二乘拟合,精度更高但实现复杂。文章还指出温度补偿这一常被忽视的关键因素,并分享了实际调试中的经验教训,包括采样时长、安装误差、验证方法等。最后建议初学者从六位置法入手,逐步优化校准精度,强调良好的校准是飞控性能的基础。

2401_88858637的博客 46

Kotlin系列之let、with、run、apply、also函数的使用

标签: Kotlin 常用技巧 目录: 一、回调函数的Kotin的lambda的简化 二、内联扩展函数之let 三、内联函数之with 四、内联扩展函数之run 五、内联扩展函数之apply 六、内联扩展函数之also 七、let,with,run,apply,also函数区别 简述: 相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说

Mikyou的专栏 23万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Kotlin中的let、with、run、apply、also常用场景

常见场景的使用 let 处理需要针对一个可null的对象统一做判空处理 private var textView: TextView? = null //没使用 let前 每一个都需要 加 ? var text = textView?.text textView?.setTextColor(Color.BLACK) //使用 let后 只需加一次 textView?.let { .

xj-up的博客 950

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Kotlin 作用域函数(let、run、with、apply、also)对比

Kotlin 的作用域函数(Scope Functions)是简化代码逻辑的重要工具,包括 let、run、with、apply 和 also。这些函数通过临时作用域为对象提供更简洁的操作方式,主要区别在于上下文对象引用方式、返回值和是否扩展函数。let 和 also 使用 it 引用对象,适合处理可空对象和链式操作;run、with 和 apply 使用 this,适合对象配置和属性操作。apply 和 also 返回对象本身,适合对象初始化和附加操作,而 let、run 和 with 返回 Lambda

2508_91837411的博客 1145

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Kotlin中-四个提升逼格的关键字你都会了吗?

let {最常用的场景就是使用let函数处理需要针对一个可null的对象统一做判空处理。然后就是需要去明确一个变量所处特定的作用域范围内可以使用。

df2551的博客 798

kotlin常见函数let,with,run,apply,also的使用

目录一、 let关键字的使用二、内联函数with三、内联扩展函数之run四、内联函数apply五、内联扩展函数之also六、let,with,run,apply,also函数区别 一、 let关键字的使用 let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范 围内,let函数的是一个不错的选择; let可以配合可空性 “?”来使用,如果data=null 则不执行le...

One X的博客 4791

Android Kotlin之let、with、run、apply、also函数的使用

相比Java语言Kotlin更加简洁安全高效。不仅支持lambda表达式,还支持非空验证机制,另外提供一套源码标准库(Standard.kt)。但是,对于Kotlin的初学者来说,可能会经常写编写出不够优雅的代码,而Kotlin提供了一些内置函数便可以帮助优化代码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。let函数实际上是一个作用域函数,当需要去定义一个变量在一个特定的作用域范围内时,就可以使用let函数。

csdn_aiyang的博客 3824

Kotlin之let,apply,with,run函数区别

Kotlin之let,apply,with,run函数区别 重新整理 重新整理了各种函数的区别,请移步到这里。 以下作废 很长一段时间内都一直使用Kotlin这门语言,也只是纯粹使用简单语法,最近有时候写的代码,编辑器自动提示使用let等函数,然后就专门花点时间研究了下。 let 首先let()的定义是这样的,默认当前这个对象作为闭包的it参数,返回值是函数里面最后一行

流水不腐小夏 1万+

Kotlin常用函数let、with、run、apply的用法和区别

在kotlin编程中let、with、run、apply这些函数使用率是非常高的,有时候可以通用,差别很小,但如果能记住他们的不同点,可以更加合理的选择使用。 在这之前首先要了解一下Lambda表达式,这会帮助你理解使用这些函数的时候有没有( )可不可以用it代替参数等。因为这些函数的最后一个参数都是lambda。 如何理解lambda呢?可以把lambda理解为就是一个函数,但这个函数比较特殊,...

有错望纠 5217
上一篇: Android 7.0适配 FileUriExposedException
下一篇: Flutter网络请求库Dio的封装(单例、动态baseUrl、拦截器、日志、请求loading)
coder_e
博客等级 码龄10年 6粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值