【Kotlin】标准库函数 ② ( run 标准库函数 | run 函数传入 Lambda 表达式作为参数 | run 函数传入函数引用作为参数 )

news2024/11/26 23:46:23

文章目录

  • 一、run 标准库函数
    • 1、run 函数传入 Lambda 表达式作为参数
    • 2、run 函数传入函数引用作为参数


Kotlin 语言中 , 在 Standard.kt 源码中 , 为所有类型定义了一批标准库函数 , 所有的 Kotlin 类型都可以调用这些函数 ;





一、run 标准库函数



1、run 函数传入 Lambda 表达式作为参数


run 标准库函数原型如下 :

/**
 * 调用以' this '值为接收者的指定函数[block],并返回结果。
 *
 * 有关详细使用信息,请参阅[scope functions]的文档(https://kotlinlang.org/docs/reference/scope-functions.html#run)。
 */
@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R {
    contract {
        callsInPlace(block, InvocationKind.EXACTLY_ONCE)
    }
    return block()
}

run 函数 传入 T.() -> R 类型 Lambda 表达式 作为参数 ,

该 run 函数的 返回值 就是 Lambda 表达式 的返回值 ;


代码示例 : 在下面的代码中 ,

run 函数的 Lambda 表达式参数 返回的是 boolean 类型的 true 值 ,

该值就是最终 run 函数的返回值 ;

fun main() {
    val ret = "Hello".run {
        true
    }
    println(ret)
}

执行结果 :

true

在这里插入图片描述


2、run 函数传入函数引用作为参数


在上述函数原型中 :

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

run 函数 , 传入 T.() -> R 类型 函数参数 ,

此处也可以传入 函数引用 ;


利用 run 函数的该用法 , 可以进行链式调用 ;


代码示例 : 在下面的代码中 ,

"hello".run(::hasO) 代码 等价于 hasO("hello") 代码 ;

"hello".run(::hasO).run(::log) 代码 等价于 log(hasO("hello")) 代码 ;

"hello".run(::hasO).run(::log).run(::println) 代码 等价于 println(log(hasO("hello"))) 代码 ;

前者是链式调用代码 , 后者是正常的函数调用方式 ;

fun main() {
    "hello"
        .run(::hasO)
        .run(::log)
        .run(::println)
}

fun hasO(name: String): Boolean {
    return name.contains("o")
}

fun log(hasO: Boolean): String {
    if (hasO) {
        return "name has o"
    } else {
        return "name doesn't has o"
    }
}

执行结果 :

name has o

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153652.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Odoo丨5步轻松实现在Odoo中打开企微会话框

文章目录一、前言二、实现方案三、接口调用步骤一、前言 企业微信作为一个很好的企业级应用发布平台&#xff0c;尤其是提供的数据和接口&#xff0c;极大地为很多企业级应用提供便利&#xff0c;在日常中应用广泛&#xff01; 最近在项目中就遇到一个与企业微信相关的场景开…

商标异议解读

商标异议解读《商标法》第三十五条规定&#xff0c;对初步审定公告的商标提出异议的&#xff0c;商标局应当听取异议人和被异议人陈述事实和理由&#xff0c;经调查核实后&#xff0c;自公告期满之日起十二个月内做出是否准予注册的决定&#xff0c;并书面通知异议人和被异议人…

Python初次实现MapReduce——WordCount

前言 Hadoop 本身是用 Java 开发的&#xff0c;所以之前的MapReduce代码小练都是由Java代码编写&#xff0c;但是通过Hadoop Streaming&#xff0c;我们可以使用任意语言来编写程序&#xff0c;让Hadoop 运行。 本文用Python语言实现了词频统计功能&#xff0c;最后通过Hadoo…

Redis从青铜到王者,从环境搭建到熟练使用

一、常见的非关系型数据库NOSQL分类NOSQL类型主要数据库产品类型特色K-V键值对存储类型Redis、Memcached使用key可以快速的查询到value&#xff0c;Memcached可以支持String类型的值value&#xff0c;Redis支持的值的数据类型很多如&#xff1a;String\set\hash\sortset\list等…

1月重磅福利——Softing在线培训课程上线

尽管有标准化和界面友好的工具&#xff0c;但车辆诊断的复杂性仍需要或多或少的专业知识支持&#xff0c;其具体取决于应用领域和要求。无论是初学者还是高级工程师&#xff0c;我们都很乐意为您日常遇到的问题提供相关支持&#xff0c;并就车辆诊断、ODX和OTX标准以及工具的使…

LeetCode 179. 最大数

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 179. 最大数&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCode 179. …

01Hashmap并发问题-ConcurrentHashMap-线程安全集合类-并发编程(Java)

1 概述 线程安全类可以分为3个大类&#xff1a; 遗留的的线程安全集合Hashtable&#xff0c;Vector使用Collections装饰的线程安全集合&#xff0c;如&#xff1a; Collections.syncronizedCollectionCollections.syncronizedListCollections.syncronizedMapCollections.sync…

Linux系列文章 —— vim的基本操作(误入vim退出请先按「ESC」再按:q不保存退出,相关操作请阅读本文)

系列文章目录 文章目录系列文章目录前言一、vim的基本概念二、vim的基本操作1.退出vim编辑器2.进入vim编辑器3.模式功能及切换三、vim命令模式命令集1.光标移动2.查找字符3.复制粘贴删除4.撤销、重做与重复做5.插入模式6.保存与退出7.环境修改四、总结1.vim的三种基本模式2.vim…

springboot之webmvc和webflux浅析

webmvc和webflux作为spring framework的两个重要模块&#xff0c;代表了两个IO模型&#xff0c;阻塞式和非阻塞式。 1、webmvc webmvc是基于servlet的阻塞式模型&#xff0c;一个请求到达服务器后会单独分配一个线程去处理请求&#xff0c;如果请求包含IO操作&#xff0c;线程…

车载以太网 - DoIP时间参数 - 06

时间参数在所有的协议定义中都无法被忽略的一块重要部分,之前的CAN&CANFD诊断协议总,ISO 16765就有相关的诊断时间参数的定义;在DoIP中,也有同样的时间参数定义,不过他是放在ISO 13400 - 2中,今天我们一起来看下这一块的内容。 ISO 13400原文文档 中文释义 时间参数定…

北大硕士LeetCode算法专题课-基础算法之排序

接连上篇&#xff1a;北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客 冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;是一种很原始的排序方法&#xff0c;就是通过不断地交换“大数”的位置达到排序的目的。 因为不断出现“大数”类似于水…

HTML实现狗屁不通文章生成器

演示 实现 css html, body {background: radial-gradient(#181818, #000000);margin: 0;padding: 0;border: 0;-ms-overflow-style: none;}.btn {display: inline-block;color: #fff;cursor: pointer;font-size: 1em;font-weight: 400;max-weight: 20%;position: relative;tex…

【零基础】学python数据结构与算法笔记8

文章目录前言46.数据结构介绍47.列表48.栈的介绍49.栈的应用&#xff1a;括号匹配问题50.队列的介绍51.队列的实现52.队列的内置模块总结前言 学习python数据结构与算法&#xff0c;学习常用的算法&#xff0c; b站学习链接 46.数据结构介绍 数据结构是指相互之间存在着一种…

双点双向重发布以及路由策略

目录前言实验要求基础配置启动rip 及 ospf 协议双向重发布路由策略前言 1&#xff0c;由于ASBR在重发布路由条目时&#xff0c;将清除原有协议携带的度量&#xff0c;会添加新协议的度量种子&#xff0c;一旦2&#xff0c;使用双点双向重发布时&#xff0c;可能会出现选路不佳…

docker容器日志清理

最近发现linux&#xff08;Centos 7&#xff09;虚拟机的空间不够了&#xff0c;想创建新的容器都失败。剩下不到100M。之前还有好几个G。然后每天不定期查看磁盘空间&#xff0c;发现不断被蚕食。今天比昨天就少了100M&#xff1b;然后下午比上午又少了50M。谁在吞噬服务器的硬…

Nacos学习之使用Nacos作为配置中心

使用Nacos作为配置中心 简单使用 1、导入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-nacos-config</artifactId></dependency>2、创建bootstrap.properties文件&#xff0c;在其中对nacos…

Vulnhub靶机:MATRIX-BREAKOUT_ 2 MORPHEUS

目录介绍信息收集主机发现主机信息探测网站探测目录爆破反弹shell提权Flag1内核提权 & Flag2介绍 系列&#xff1a;Matrix-Breakout&#xff08;此系列共1台&#xff09; 发布日期&#xff1a;2022 年 7 月 11 日 难度&#xff1a;中级 运行环境&#xff1a;Virtualbox运行…

快速搭建ChatGPT的AI聊天QQ机器人[含问题解决办法]

一、cqhttp 1. 下载cqhttp 首先安装 cqhttp 框架&#xff0c;我们从 release 界面下载最新版本的 go-cqhttp&#xff0c;需要根据不同的系统选择不同的文件 我目前是mac系统&#xff0c;暂时仅举例macOs Intel 版 Macos&#xff1a; go-cqhttp_darwin_amd64.tar.gz 2. 启动 …

jvm运行过程

VM是Java程序运行的环境,同时是一个操作系统的一个应用程序进程,因此它有自己的生命周期,也有自己的代码和数据空间. JVM体系主要是两个JVM的内部体系结构分为三个子系统和两大组件&#xff0c;分别是&#xff1a;类装载器&#xff08;ClassLoader&#xff09;子系统、执行引擎…

5.1、运输层概述

之前所介绍的计算机网络体系结构中的物理层、数据链路层以及网络层它们共同解决了将主机通过异构网络互联起来所面临的问题&#xff0c;实现了主机到主机的通信\color{red}实现了主机到主机的通信实现了主机到主机的通信。 网络层的作用范围主机到主机 但实际上在计算机网络中…