Kotlin中内置函数的用法和区别总结

前言

在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。

本文主要记录kotlin中let、apply、run、also、with等函数的用法和区别,下面话不多说了,来一起看看详细的介绍吧

0. let

val a = "hello,kotlin".let{
 println(it)
 3
}

println(a)

hello,kotlin
3

定义:

public inline fun <T, R> T.let(block: (T) -> R): R = block(this)

解释:调用 “hello,kotlin”的let函数,it在作用域中替代该对象(hello,kotlin),默认返回函数最后一行

1. apply

val a = "hello,kotlin".apply{
 println(this)
}

println(a) 

hello,kotlin
hello,kotlin

定义:

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }

解释:函数内可以用this替代调用apply函数的对象,返回值为该对象自己。

2. run

val a = "hello,kotlin".run{
 println(this)
 2
}

println(a) 

hello,kotlin
2

定义:

public inline fun <T, R> T.run(block: T.() -> R): R {
 return block()
}

解释:根据上述执行代码,run函数返回闭包内最后一行。

3. also

val a = "hello,kotlin".also{
 println(it)
}

println(a) 

hello,kotlin
hello,kotlin 

定义:

public inline fun <T> T.also(block: (T) -> Unit): T {
 block(this)
 return this
}

解释:从源码的定义可以看出,also执行block(闭包),并返回this,即调用also函数的对象。

4. with

val a = with("string") {
 println(this)
 3
}
println(a)

string
3

定义:

public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()

解释:并不是扩展函数,将指定对象作为函数的参数,在作用域内this替代该对象,返回值为该对象的最后一行。指定的T作为闭包的receiver,使用参数中闭包的返回结果。

以上,注意阅读Kotlin相关高阶函数的源码时候,如果函数中最后一个参数为闭包,那么最后一个参可以不写在括号中,而写在括号后面,如果只有一个参数,括号也可以去掉。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Kotlin 开发环境详解及简单实例

    Hello Kotlin 在前段时间举办的Google I/O 2017上,Google宣布Kotlin成为Android官方的开发语言,这个最初发布于2011年的语言在短短的时间内就吸引了大量的开发者,而Google使得它进入了更多人的视线. Kotlin是一种开源的基于JVM的变成语言,由JetBeans公司开发(大概除了使用VS的.net开发者意外,都会或多或少听说或使用过IDEA吧),名字取自圣彼得堡附近的一个小岛(Koltin island). Kotlin是一种简单的语言,其主要目标

  • Kotlin中Suppress的非常规用法示例

    前言 在 Java 中,有个叫 SuppressWarnings 的注解,用于忽略特定的编译器警告.Kotlin 中也有一个类似功能的注解,叫做 Suppress,本文主要讲讲这个注解有什么用. 常规用法 有时候会写出这样的一些代码.这些在Kotlin编译器的眼里可能出现问题的代码,实际上却非常正确,跑起来不会出任何问题. 然后你就得到了一个编译器警告(warning),甚至是编译错误(error). 比较常见的,比如说 unchecked cast: val some: List<*> =

  • Android Kotlin开发实例(Hello World!)及语法详解

    Android Kotlin开发实例及语法详解 前言 Kotlin是一种在 Java虚拟机上执行的静态型别编程语言,它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言.该语言有几个优势 1. 简洁 它大大减少你需要写的样板代码的数量. 2. 安全 避免空指针异常等整个类的错误. 3. 通用 构建服务器端程序.Android 应用程序或者在浏览器中运行的前端程序. 4. 互操作性 通过 100% Java 互操作性,利用 JVM 既有框架和库. 配置 在我们的AndroidS

  • Kotlin中内置函数的用法和区别总结

    前言 在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码.Standard.kt是Kotlin库的一部分,它定义了一些基本函数. 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大. 本文主要记录kotlin中let.apply.run.also.with等函数的用法和区别,下面话不多说了,来一起看看详细的介绍吧 0. let val a = "hello,kotlin".let{ println(it)

  • Python3.6.x中内置函数总结及讲解

    Python3.6.x中内置函数总结 # -*- coding:utf-8 -*- """ abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open() str() bool()

  • python中内置函数ord()返回字符串的ASCII数值实例详解

    目录 常用 ASCII 码表对照表: ord()函数介绍: 应用实例: 常用 ASCII 码表对照表: 注意如下几点: 0-9:48-57A-Z:65-90a-z:97-122 ord()函数介绍: ord() 函数是 chr() 函数(对于 8 位的 ASCII 字符串)的配对函数,它以一个字符串(Unicode 字符)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值. >>> ord('0') 48 >>> ord('A') 65 >>

  • Python中你应该知道的一些内置函数

    前言 python内置了一些非常巧妙而且强大的内置函数,对初学者来说,一般不怎么用到,我也是用了一段时间python之后才发现,哇还有这么好的函数,这个函数都是经典的而且经过严格测试的,可以一下子省了你原来很多事情,代码不仅简洁易读了很多,而且不用自己去闭门造车.既方便了自己又减少了bug. 一.sorted() 1)对于一个列表排序 sorted([100, 98, 102, 1, 40]) >>>[1, 40, 98, 100, 102] 2)通过key参数/函数 比如一个长列表里面

  • d3.js中冷门却实用的内置函数总结

    前言 其实在d3.js的API文档中,提供了很多内置的函数,但是有些很有用的内置函数却被无情的忽略了,这篇博客就来整理整理这些被遗忘却很实用的函数.希望整理过后,他们不再被遗忘. selection.classed(name,[value]) value参数可选,如果没有指定,则返回与name参数匹配的第一个非空元素是否绑定了指定的CSS类,true表示绑定,false表示未绑定.如果value指定了的话,就是为selection添加/删除CSS类. 这点与selection.attr(name

  • 在smarty中调用php内置函数的方法

    相信有很多朋友还不知道,可以在smarty模板里调用php的内置函数,我们一起来看看它的用法. 模板书写: {'param1'|functionName:'param2':'param3'} php函数原型: echo functionName('param1','param2','param3'); 实例: {'1234567'|substr:'1':'2'} 下面这个和函数的参数顺序有关系 {'a'|str_replace:'A':'abcd'} 直接延伸到,直接在php中写一个函数调用,不

  • python中__call__内置函数用法实例

    本文实例讲述了python中__call__内置函数的用法.分享给大家供大家参考.具体分析如下: 对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2).模拟函数的对象可以用于创建仿函数(functor) 或代理(proxy) class DistanceForm(object): d

  • python中的内置函数max()和min()及mas()函数的高级用法

    max(iterable, *[, key, default]) max(arg1, arg2, *args[, key]) 函数功能为取传入的多个参数中的最大值,或者传入的可迭代对象元素中的最大值.默认数值型参数,取值大者:字符型参数,取字母表排序靠后者.还可以传入命名参数key,其为一个函数,用来指定取最大值的方法.default命名参数用来指定最大值不存在时返回的默认值. eg a.传入的多个参数的最大值 print(max(1,2,3,4)) 输出 b.1 传入可迭代对象时,取其元素最大

  • 对python中的for循环和range内置函数详解

    如下所示: 1.for循环和range内置函数配合使用 range函数生成一个从零开始的列表, range(4)表示list:0123 range(1,11,2)表示从1开始到11-1为止步长为2的list:13579 即range(i)表示从0开始到i-1的列表,range(m,n)表示从m开始到n-1的列表,range(m,n,t)表示从m开始步长为t到n-1的列表 ''' print('第一次循环输出:') for i in range(4): print(i) print('第二次循环输

  • Python中函数的基本定义与调用及内置函数详解

    前言 函数function是python编程核心内容之一,也是比较重要的一块.首先我们要了解Python函数的基本定义: 函数是什么? 函数是可以实现一些特定功能的小方法或是小程序.在Python中有很多内建函数,当然随着学习的深入,你也可以学会创建对自己有用的函数.简单的理解下函数的概念,就是你编写了一些语句,为了方便使用这些语句,把这些语句组合在一起,给它起一个名字.使用的时候只要调用这个名字,就可以实现语句组的功能了. 语法如下: # 定义方式 : def functionname([pa

随机推荐