中缀表示法
发表于|更新于
|浏览量:
无意苦争春,一任群芳妒。零落成泥碾作尘,只有香如故。——陆游
中缀表示法能让我们定义一些“关键字”
标有 infix 关键字的函数也可以使用中缀表示法(忽略该调用的点与圆括号)调用。中缀函数必须满足以下要求:
1
2
3
4
5
6
7 infix fun Int.shl(x: Int): Int { …… }
// 用中缀表示法调用该函数
1 shl 2
// 等同于这样
1.shl(2)
代码如下:
1 | infix fun Int?.default(x: Int): Int = this ?: x |
效果:

相关推荐
2025-10-14
ab-download-manager
这是一个最好的时代,这是一个最坏的时代;这是一个智慧的年代,这是一个愚蠢的年代;这是一个信仰的时期,这是一个怀疑的时期;这是一个光明的季节,这是一个黑暗的季节;这是希望之春,这是失望之冬;人们面前应有尽有,人们面前一无所有;人们正踏上天堂之路,人们正走向地狱之门。——狄更斯《双城记》 https://github.com/amir1376/ab-download-manager ab-download-manager:开源多线程下载器的极简与强大 在如今网络资源爆炸的时代,谁还没遇到过“大文件下载速度慢”“下载不稳定断点重下”“批量文件分段管理”的痛苦?如果你正在寻找一个开源、小巧、灵活的下载管理解决方案,不妨关注一下 amir1376/ab-download-manager —— 它可能会让你对“下载”这件事有新的体验! 一、项目简介 项目地址:amir1376/ab-download-manager 一句话描述:一个开源的下载管理器,追求多线程、稳定、可扩展,适合开发者和极客。 主语言:——(需参考源码和 repo 主页) 适用场景:想自定义下载流程...
2022-08-27
kotlin延迟属性
得饶人处且饶人——曹雪芹 kotlin习惯用法见:https://www.kotlincn.net/docs/reference/idioms.html 这里试试延迟属性: https://www.kotlincn.net/docs/reference/delegated-properties.html#%E5%BB%B6%E8%BF%9F%E5%B1%9E%E6%80%A7-lazy 1234567val lazyValue: String by lazy { println("computed!") "Hello"}println(lazyValue)println(lazyValue) 运行结果: 123computed!HelloHello
2022-10-21
尾递归函数
怯懦的朋友在叛离之后,会成为最凶残的仇敌——埃·斯宾塞 中文文档 Kotlin 支持一种称为尾递归的函数式编程风格。 这允许一些通常用循环写的算法改用递归函数来写,而无堆栈溢出的风险。 当一个函数用 tailrec 修饰符标记并满足所需的形式时,编译器会优化该递归,留下一个快速而高效的基于循环的版本: 1234val eps = 1E-10 // "good enough", could be 10^-15tailrec fun findFixPoint(x: Double = 1.0): Double = if (Math.abs(x - Math.cos(x)) < eps) x else findFixPoint(Math.cos(x)) 这段代码计算余弦的不动点(fixpoint of cosine),这是一个数学常数。 它只是重复地从 1.0 开始调用 Math.cos,直到结果不再改变,对于这里指定的 eps 精度会产生 0.7390851332151611 的结果。最终代码相当于这种更传统风格的代码: 123456789...
2022-09-18
拓展函数
对于聪明人来说,劝告是多余的;对于愚昧人来说,劝告是不够的——莫里哀 中文文档 拓展函数的定义: 1fun String.delBlank() = this.filter { !Character.isWhitespace(it) } 以及: 123fun Int?.default(i: Int = 0) = ifun String?.default(i: String = "") = i 使用: 123456789101112fun String.delBlank() = this.filter { !Character.isWhitespace(it) }val noBlank = "Hello World".delBlank()println(noBlank)fun Int?.default(i: Int = 0) = ifun String?.default(i: String = "") = ival s: Int? = nullprintln(s.default...
2023-04-20
kotlin的KProperty
浪子挥霍的是他的祖业,财迷葬送的却是他自己。——托·富勒 在mp中使用KtQueryWrapper时,需要如下使用: 1KtQueryWrapper(User::class.java).eq(User::name, "sss").eq(User::roleId, "sss2") 这里的User::name是一个KProperty,其文档:https://kotlinlang.org/docs/reflection.html 可以使用KProperty的name属性获取到其属性名 1User::name.name 当然其还有很丰富的其他属性、函数 在项目中使用其,需要先引入kotlin-reflect依赖 1234<dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-reflect</artifactId></dependency>
2022-11-03
kotlin NaN坑
发脾气的人比被发脾气的对象所受的损失更大——霍姆斯 今天发现一个坑,在代码里尝试toBigDecimal抛出了NumberFormatException debug一看,发现值为NaN 在kotlin里,这样的代码会导致NaN 1234val nan = 0.0 / 0.0nan.toBigDecimal() // java.lang.NumberFormatExceptionjava.lang.Double.isNaN(nan) // true 最重要的是NaN,不会通过 安全调用操作符?. 的判断,因为其属于有值 所以上述代码可以改为 12val nan = 0.0 / 0.0nan.takeUnless { it.isNaN() }?.toBigDecimal() // null

阿超
我的名字叫阿超 年龄25岁 家在北京市 职业是软件开发 每天最晚也会在八点前回家 不抽烟 酒浅尝辄止 晚上十二点上床 保证睡足八个小时 睡前写一篇博客 再做二十分钟俯卧撑暖身 然后再睡觉 基本能熟睡到天亮 像婴儿一样不留下任何疲劳和压力 就这样迎来第二天的早晨 健康检查结果也显示我很正常 我想说明我是一个不论何时都追求内心平稳的人 不拘泥于胜负 不纠结于烦恼 不树立使我夜不能寐的敌人 这就是我在这社会的生活态度
Follow Me公告
This is my Blog