博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
infix关键字标识
阅读量:7047 次
发布时间:2019-06-28

本文共 902 字,大约阅读时间需要 3 分钟。

hot3.png

从mapOf赋值说起

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

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

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

public infix fun 
A.to(that: B): Pair
= 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一样爽一样花哨的。

转载于:https://my.oschina.net/droidwolf/blog/1817418

你可能感兴趣的文章
把插入的数据自动备份到另一个表中 ~ 语境:本地和服务器自动同步
查看>>
缓存穿透 缓存雪崩
查看>>
编程的智慧
查看>>
Android 手机卫士--安装过程中点击回退按钮
查看>>
java中文文档官方下载
查看>>
【挖财工作笔记】2016-10-11【java.util.stream】
查看>>
mount源码分析 【转】
查看>>
rac库grid目录权限(6751)导致数据库宕机案例 此方法仅用于紧急救助
查看>>
网站和数据库分开放,可以实现吗
查看>>
SFTP in Python: Really Simple SSH
查看>>
javaweb学习总结(十九)——JSP标签
查看>>
网址URL中特殊字符转义编码
查看>>
1598元配备满血配置,最近买千元手机一定得了解魅族X8
查看>>
丽思卡尔顿在美国沙漠中的另类奢华,打造属于你的慵懒假期
查看>>
1.25亿用户以后,Netflix总结的系统高可用经验
查看>>
拍视频得现金,单个视频收入上千,这可能是今年最壕的短视频平台
查看>>
多隆:从工程师到合伙人 | 阿里技术人纪录片
查看>>
因聚而生,以行致盛 华为中国ICT生态之行2018走进铜仁
查看>>
Micronaut:同时支持Java,Groovy和Kotlin的轻量级全栈框架!
查看>>
快递员纷纷转行外卖员 网点要倒闭?来看看真相是什么!
查看>>