文档章节

infix关键字标识

obaniu
 obaniu
发布于 2018/05/23 16:43
字数 306
阅读 31
收藏 0

从mapOf赋值说起

mapOf初始化生成一个key-value的map非常简洁,突然觉得很好奇它是怎么实现的。先来看看一段mapOf赋值代码

val m = mapOf(
	"a" to 11
	, "b" to 22
	, "c" to 3
)

进入mapOf源码调用了扩展函数,构造一个Pair

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

也就是说 receiver to argument 在kotlin中是一个特殊的函数to的调用语法。实际这也是kotlin DSL的基石。

实现自定义DSL方式函数调用

是否所有扩展函数或对象的函数都支持这样的调用方式呢?答案是不是。只有在函数标识为infix才可以使用这样的调用方式。 比如

public infix fun String.hello( name:String) = println( "$this say:hello $name!")
"obaniu" hello "world"

infix的最终行为

如上面可知infix标识完全是编译器的语法糖,infix的函数生成的java函数标识是static的

public static final void hello(@NotNull String $receiver, @NotNull String name){
    Intrinsics.checkParameterIsNotNull($receiver, "$receiver");Intrinsics.checkParameterIsNotNull(name, "name");String str = "" + $receiver + " say:hello " + name + '!';System.out.println(str);
}

好吧,可以说kotlin这么玩就是想要DSL一样爽一样花哨的。

© 著作权归作者所有

共有 人打赏支持
obaniu
粉丝 37
博文 83
码字总数 39241
作品 0
广州
高级程序员
私信 提问
infix 自定义运算符

最近在看swift,都知道快速学习一门语言的根本就是看代码,写代码。 于是乎看到一个奇特的关键字infix. 不明白是干啥的额,最终找到了答案 infix是可以自定义运算符的关键字啊 例如定义个?运...

chengxu媛
2016/01/19
16
0
Kotlin基础教程-函数

函数 在之前的文章中,或多或少的介绍过函数的一些基本概念,这里不想再重头讲,只说一些之前没遇到过的。 中缀符号 关键字:infix 表达式函数 因为函数返回表达式,可以省略大括号。 局部函...

qhshiniba
2017/06/06
0
0
函数式编程与面向对象编程[4]:Scala的类型关联Type Alias

函数式编程与面向对象编程[4]:Scala的类型关联Type Alias 之剑 2016.5.4 23:55:19 类型关联 Type Alias type关键字 scala里的类型,除了在定义class,trait,object时会产生类型,还可以通过t...

程序员诗人
2016/05/06
0
0
【Kotlin学习之旅】Kotlin关键字(keyword)

版权声明:本文为【欧阳鹏】原创文章,欢迎转载,转载请注明出处! 【http://blog.csdn.net/ouyang_peng】 https://blog.csdn.net/qq446282412/article/details/85064979 一、简介 在Kotlin语...

欧阳鹏
2018/12/18
0
0
.NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配

.NET Core 3 Preview 2 发布了,此版本主要带来了 C# 8 相关的新功能,C# 8 Preview 2 是 .NET Core 3 SDK 的一部分。 C# 8 中使用模式进行更多操作,主要特性包括: using 声明 改变需要缩进...

h4cd
01/30
0
37

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7 64位安装MySql教程

CentOS7 64位安装MySql教程 先检查系统是否装有mysql rpm -qa | grep mysql 下载mysql的repo源 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 报错: -bash: wget: ......

须臾之余
36分钟前
1
0
Python 网络爬虫(新闻采集脚本)

=====================爬虫原理===================== 通过Python访问新闻首页,获取首页所有新闻链接,并存放至URL集合中。 逐一取出集合中的URL,并访问链接获取源码,解析出新的URL链接添...

阿锋zxf
49分钟前
2
0
JavaScript继承(六)——寄生组合式继承

JavaScript继承(三)——组合继承中讲到,组合继承是JavaScript中最常用的继承模式,但是它也有自己的不足之处,现在我们就来剖析它的不足,如下示例: function Human(name){ this.name ...

Bob2100
54分钟前
1
0
一文说尽MySQL事务及ACID特性的实现原理

本文将首先介绍 MySQL 事务相关的基础概念,然后介绍事务的 ACID 特性,并分析其实现原理。MySQL 博大精深,文章疏漏之处在所难免,欢迎批评指正。 MySQL 事务基础概念 事务(Transaction)是访...

架构师springboot
今天
8
0
Vue +Element UI后台管理模板搭建示例

一、蓝色主题 Element ui 后台管理 Demo https://github.com/taylorchen709/vueAdmin https://taylorchen709.github.io/vueAdmin/#/user Element ui 文档 http://element.eleme.io/#/zh-CN/......

tianma3798
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部