Kotlin简明学习,infix函数

kotlin infix函数 infix函数作用:将函数调用的语法修改了一下 比如:A to B 等于 A.to(B) 实现方式:在函数前面加上infix即可 限制条件:1.不能是顶层函数;2.参数只能有一个 例子: infix fun String.beginsWith(p:String) = startsWith(p) ... 阅读详情

我们在声明一个map的时候通常可以用下面的代码:

val map = mapOf(1 to "one", 2 to "two", 3 to "three")

上面这段代码一看有个地方很奇怪,就是这个to是什么?在Java中没有见过这种写法。

看下mapOf的源码:

public fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> = if (pairs.size > 0) linkedMapOf(*pairs) else emptyMap()

从上面的源码可以看到mapOf需要一个可变参数,类型是Pair。我们再按住Ctrl键,点击to关键字,看下to的源码定义。如下:

/**
 * Creates a tuple of type [Pair] from this and [that].
 *
 * This can be useful for creating [Map] literals with less noise, for example:
 * @sample samples.collections.Maps.Instantiation.mapFromPairs
 */
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

发现to其实也是个方法,不过方法前面加了个关键字infix。这就是我们所要说的infix函数。

infix函数需要几个条件:
- 只有一个参数
- 在方法前必须加infix关键字
- 必须是成员方法或者扩展方法

举例

我们在InfixTest.kt文件中加入如下代码:

infix fun Int.add(x: Int): Int {
    return this + x
}

调用这个infix函数,并打印

println(100 add 200)

输出结果:

I/System.out: 300

上面这个列子是扩展函数实现的情况,下面举一个成员函数的例子:

我们定义一个Account类:

class Account {
    var balance = 100.0

    infix fun add(amount: Double) : Unit {
        this.balance = balance + amount
    }
}

上面的代码可以看到有个infix函数

调用并打印:

val  account = Account()
account add 100.00
print(account.balance)

输出的结果是200.00

总结:

这篇文章就是给大家演示了下infix函数,它没有给Kotlin带来新的什么特性,不想扩展函数,但是infix函数,增加了可读性,让我们的代码更易读懂。

Kotlin简明学习—文章列表

MySQL安装配置教程(超级详细) 一、 下载MySQL Mysql官网下载地址:MySQL :: Download MySQL Installer (Archived Versions) 1. 选择要安装的版本,本篇文章选择的是5.7.31版本,点击Download下载 正在上传…重新上传取消 二、 安装MySQL 1. 选择设置类型双击运行mysql-installer-community-5.7.31.0.msi 这里选择是自定义安装,所以直接选择“Custom”,点击“Next” “Developer Default”是 阅读详情

相关推荐

大数据课程综合实验案例:网站用户行为分析

大数据课程综合实验案例1 案例简介1.1 案例目的1.2 适用对象1.3 时间安排1.4 预备知识1.5 硬件要求1.6 软件工具1.7 数据集1.8 案例任务1.9 实验步骤2 本地数据上传到数据仓库Hive2.1 实验数据集的下载2.2 数据集的预处理(1)删除文件第一行记录,即字段名称(2)对字段进行预处理(3)导入数据库3 Hive数据分析3.1 操作Hive3.2 简单查询分析3.3 查询条数统计分析3.4 关键字条件查询分析3.4.1 以关键字的存在区间为条件的查询3.4.2 关键字赋予给定值为

weixin_44616879的博客 1万+

Kotlin之使用infix函数构建更可读的语法

我们在Kotlin中就多次使用A to B这样的语法结构构建键值对,包括Kotlin自带的mapOf()函数,这种语法结构的优点是可读性强。那么这种功能是怎么实现的?to是不是Kotlin语言中的一个关键字?本章我们来对这个功能进行解密。 首先,to并不是Kotlin语言中的一个关键字,之所以我们能使用A to B这样的语法结构,是因为**Kotlin提供了一种高级语法糖特性:infix函数**。infix函数只是把编程语言函数调用的语法规则调整了一些而已,比如A to B这样的写法,实际上等价于A.to(

ChenYiRan123456的博客 1083

matlab球面投影(二)

matlab球面投影,想做一个全景相机,不知道,要做成啥样,于是在MATLAB先仿真一下,看下是个啥样子 百度别人做的,复制下面的代码到MATLAB的命令串口下,,网上找了张全景图,可以是bmp,jpg,改程序就可以了 回车运行就可以看到结果。 复制下面代码时,下面的中文注释记得删除,MATLAB是会报错的, close all; clear all; clc [x,y,z]=sphere(50); A=imread('a.JPG'); //名字是自己命名的,记得改 B=warp(x,y,-z,

rjszcb的博客 3161

Kotlin 中的 infix 关键字(中缀函数)

也就是说,has 函数和 contains 函数的功能世纪上是一摸一样的,只是它多了一个 infix 关键字,从而拥有了 infix 函数的语法糖功能。但是 infix 函数允许我们将函数调用的小数点、括号等计算机相关的语法去掉,从而使用一种更接近英语的语法来编写程序,使得代码看起来更具有可读性。也就是说, A to B 这样的语法结构实际上得到是一个包含 A、B 数据的 Pair 对象,而 mapOf 函数实际上接收的正式一个 Pair 类型的可变参数列表,这样我们就将这种神奇的语法结构完全解密了。

xingyu19911016的博客 1498

P450酶催化循环的Amber-Gromacs混合模拟实战:从血红素加氧到产物释放

本文详细介绍了针对P450酶完整催化循环的Amber-Gromacs混合模拟实战策略。通过Amber为关键氧合血红素中间体(CPDI)构建精确力场,再利用Gromacs的高效GPU加速进行长时间尺度动力学模拟,完整覆盖从底物结合到产物释放的催化过程,为研究酶催化机制提供了强大的计算工具。

weixin_29201859的博客 315

基于ESP32的无线DMX节点设计:从Art-Net/sACN到DMX512的协议转换与实现

在舞台灯光和建筑照明控制系统中,DMX512是行业标准的数字调光协议,用于控制灯具的亮度、颜色和效果。其原理是通过RS-485差分信号串行传输512个通道的数据,每个通道对应一个控制值。然而,传统有线DMX布线复杂、成本高,在移动装置、历史建筑或临时活动中部署困难。为解决此问题,业界发展出了基于以太网的灯光控制协议,如Art-Net和sACN(E1.31),它们将DMX数据封装在UDP包中,通过网络传输。这项技术的核心价值在于实现了灯光控制的网络化与无线化,大幅提升了系统的灵活性和部署效率。其典型应用场景包

weixin_30175731的博客 227

Kotlin(十八)使用infix函数构建更可读的语法

infix函数是什么难理解的事物,它只是把编程语言函数调用的语法规则调整了一下而已,比如A to B这样的写法,实际上等价于A.to(B)的写法。这个代码一定返回为true的。函数的用法虽然非常简单,但是借助infix函数,我们可以使用一种更具可读性的语法来表达这段代码。首先,除去最前面的infix关键字不谈,这是一个String类的扩展函数。我们给String类添加了一个函数,它也是用于判断一个字符串是否是以某个指定参数开头的,并且它的内部实现就是调用的String类的函数。但是加上了infix。

陌生人 748

中国高质量夜间灯光数据

中国高质量夜间灯光数据是CnOpenData与吉林高分遥感应用研究院有限公司合作的数据库 ,基于多源夜间灯光卫星遥感影像,经过科学手段对数据进行降噪、修正、分析统计,以年度、月度为更新频率,以省市县三级行政区划作为统计单元,制作高质量夜间灯光数据。

Sunny9qx的博客 3307

Kotlin 中 infix 关键字的原理和使用场景

infix()

xingyu19911016的博客 859

用逐飞STC32G库做个智能小车:编码器测速、PWM调电机、ADC读电池电压(完整项目)

本文详细介绍了如何使用逐飞科技的STC32G12K128开源库构建智能小车项目,涵盖编码器测速、PWM电机控制和电池电压监测等核心功能。通过硬件选型、开发环境搭建、代码实现及调试技巧的全流程讲解,帮助开发者快速掌握基于STC32G的嵌入式系统开发,实现高性能的智能小车控制。

weixin_42526417的博客 194

【项目实战】使用Python - Mediapipe、OpenCV进行手部面部检测(Python源码)

本文介绍了使用MediaPipe和OpenCV库进行实时面部和手部关键点检测的方法。通过MediaPipe的Holistic模型,可以获取468个面部特征点及每只手21个特征点。文章详细说明了环境配置、模型初始化参数设置,并提供了完整的代码实现,包括视频流处理、关键点绘制和FPS计算等功能。这套方案可应用于手语识别、疲劳检测等计算机视觉场景,为开发者提供了一套高效的开箱即用解决方案。

梦想起飞的地方 480

kotlin : infix函数(中缀方法)

参考: Kotlin简明学习,infix函数 val map = mapOf( 1 to "one", 2 to "two", 3 to "three" ) 点击to 可看到是一个中缀方法: public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that) infix函数(中...

火星男孩的分享空间 2673

LSTM 深度解析从原理推演到现代序列建模的演进

LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊的递归神经网络(RNN),它通过引入记忆单元(Cell State)来解决普通RNN在长序列数据处理中的梯度消失问题。LSTM可以在长时间的序列中捕捉依赖关系,是一种非常适合处理时间序列、自然语言处理、语音识别等任务的深度学习模型。在LSTM中,记忆单元(Cell State)是一个贯穿整个序列的数据通道,用于存储和传递关键信息。记忆单元在LSTM的时间步之间保持信息的持久性,可以看作是一个长期记忆的“容器”。

hello.reader 3万+

Kotlin infix函数用法详解

plaintext12345678910111213println("(${result.x}, ${result.y})") // 输出:(6, 8)

XHRK1的博客 1177

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Kotlin 中 infix 函数的应用:构建清晰易读的语法

Kotlin 是一种静态类型的跨平台编程语言,旨在提高生产力和安全性。它与 Java 完全兼容,可用于开发 Android 应用程序、Web 应用程序和服务器端应用程序。Kotlin 的一些关键特性包括 null 安全、扩展函数和类型推断。它也比 Java 更简洁,可以减少所需的样板代码量。2017 年,Google 正式宣布 Kotlin 为 Android 开发的一流语言,此后迅速受到 Android 开发者的欢迎。

qq_38334677的博客 1390

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Kotlin中泛型与infix函数

文章目录【Kotlin】学习篇(六)泛型委托 【Kotlin】学习篇(六) 泛型 在一般的编程模式之下,我们需要给任何一个变量指定一个具体的类型,而泛型允许我们在不指定具体类型的情况下进行编程,这样编写出来的代码将会拥有更好的扩展性。 泛型主要有两种定义方式:一种是定义泛型类,另一种是定义泛型方法,使用语法结构都是。 例如我们要定义一个泛型类, class MyClass<T>{ fun method(param:T):T{ return param } } 此

dondurma的博客 605

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Kotlin系列八:静态方法、infix函数、高阶函数的常见应用举例

一 静态方法 java中定义静态方法只需要在方法前添加static即可; kotlin中有四种方式:object的单例类模式、companion object(可以局部写静态方法)、JvmStatic注解模式、顶层函数模式。 1.1 object 用object修饰的类,实际上是单例类,在Kotlin中调用时是类名加方法直接使用。 object Util { fun doAction(){ Log.v("TAG","doAction") } } //ko...

许进进的博客 5383

Kotlin-infix函数,语法A to B(第一行代码Kotlin学习笔记10)

阿斯顿发

liuhp的博客 2513

Kotlin学习笔记之使用infix函数

例1 例2

贰佰没有伍 725

java+infix_[学习]拥抱kotlin(Infix)

我遇到了 Infix 函数。尽量一个就是一天,下次找的时候方便。有了这个函数就相当于自己定义了一种操作,跟自定义操作符差不多,但是又不一样,首先自定义操作符是那些特殊字符,比如 + , - 和 * 等等。C++ 里面有,只不过很久没看了也忘了。 kotlin 这个的命名规范跟变量一样,我自己简单的使用了一下,发现除了写法多了,其他的跟函数相同; Infix 必须满足以下要求:必须是成员函数或扩展函...

weixin_39557402的博客 155

infix函数(中缀表达式)

1.什么是infix函数 Kotlin允许在不使用括号和点号的情况下调用函数,那么这种函数被称为 infix函数。 例如:集合的to就是一个infix函数。看起来像是一个关键字,实际是一个to()方法。 map( 1 to "one", 2 to "two", 3 to "three" ) 下面是to的源码,可以发现to() 方法就有用infix修饰 /** * Creates...

LIENLIN的博客 2097

Kotlin中的infix函数:优雅的DSL设计利器

Kotlin的infix函数允许以更自然的语法调用函数,省略点号和括号。它必须是成员/扩展函数,且只能有一个参数。常见应用场景包括:创建测试断言(如x shouldBe y)、构建DSL(如SQL查询)、数学运算和集合操作。虽然infix能提高代码简洁性,但需注意优先级规则(低于算术运算符)并避免过度使用影响可读性。最佳实践包括选用直观的函数名、保持简单逻辑,特别适合领域特定语言开发。合理使用infix可使API更优雅,但应始终以代码清晰度为优先考量。

dongdeaiziji的专栏 635

kotlin 知识点六 使用infix函数构建更可读的语法

的contains()函数而已。但是加上了infix关键字之后,beginsWith()函数就变成了一个infix函数,这样除了传统。startsWith()函数的用法虽然非常简单,但是借助infix函数,我们可以使用一种更具可读。另外,infix函数由于其语法糖格式的特殊性,有两个比较严格的限制:首先,infix函数是。这里只是将to()函数改名成了with()函数,其他实现逻辑是相同的,因此相信没有什么解释。可以看到,这里使用定义泛型函数的方式将to()函数定义到了A类型下,并且接收一个B类型的。

qq_42795723的博客 512

【Kotlin笔记】infix函数

在Kotlin中我们可以使用A to B的方式来构建一个键值对,但这里的to并不是关键字,而是采用Kotlin提供的一种高级语法糖规则进行了调整,A to B这样的写法其实等价于A.to(B),下面我们来看一看to()函数的源码吧,如下: public infix fun <A,B> A.to(that:B):Pair<A,B>=Pair(this,that) ...

weiwai的博客 473

Kotlin学习之使用infix函数构建更可读的语法

infix 1.什么是infix函数 Kotlin允许在不使用括号和点号的情况下调用函数,那么这种函数被称为 infix函数。 2.infix 函数需要满足的条件 需要满足的条件: 必须是成员函数或扩展函数 必须只有一个参数 其参数不得接受可变数量的参数且不能有默认值 3.使用示例 在String类中有一个startsWith()函数,用于判断一个字符串是否是以某个指定函数开头的。 if( "Hello Kotlin".startsWith("Hello") ){ //处理具体的逻辑 }

weixin_45942124的博客 324

【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)

Kotlin中的集合API不仅包含Java中相关的类库方法还通过扩展函数和扩展属性的方式对齐进行额外扩展,这使得涌现出大量实用操作,其中包括利用vararg修饰符来传递可变数量的参数,以及使用infix修饰符的中缀表达,甚至可以对对象使用解构声明来减少额外的变量污染

面向价值,效用至上 1550
上一篇: Koltin简明学习,操作符重载(Operator overloading)
下一篇: Kotlin简明学习—文章列表
android2me
博客等级 码龄14年 30粉丝 21原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值