最近总是因为一些异常警告搞得有点崩溃,于是打算以后把遇到的异常都总结起来,方便以后查看。
今天,在使用Kotlin写项目的时候遇到一个常量名称定义的警告,如下:
刚看到这个警告的时候我在想,这要正则有什么关系?于是我在我平常加的一些群里想看看有没有哪个大神能够知道,把图贴上去以后,没一个人鸟我,我好受伤!
他们都在讨论自己的刀功,菜功!为什么?你们想问,因为到中午了,哈哈~你懂了么?
不说费话了,告诉你们原因:
这是因为我常量名称中带有“_”。把它去了就好了,原因嘛:
在Kotlin中,可以使用一个下划线字符(_)作为lambda或表达式函数的参数的名称,或作为解构条目的名称。
作为lambda函数的参数名称
之前,我们已经熟练使用,解构声明语法为lambda表达式传递参数,所以我们可以这么做:
fun main(args: Array<String>) {
val aa = mapOf(1 to "a",2 to "B")
aa.forEach { key, value -> println("value:$value")
}
在上述示例中,只是用到了value值,key并没有用到。这样,我们就想不在声明key,那么就需要使用下划线字符(_)作为key替代,即:
fun main(args: Array<String>) {
val aa = mapOf(1 to "a",2 to "B")
aa.forEach { _, value -> println("value:$value")
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
作为解构声明的参数
解构声明就是将一个对象解构(destructure)为多个变量,也就是意味着一个解构声明会一次性创建多个变量。尽管这样很方便,但是,如果用不到的变量必然也必须得声明,从而造成了变量的冗余。对于解构声明不了解的,可参考:Kotlin-解构声明
之前,通过解构声明创建多个变量时,我们这么做:
fun main(args: Array<String>) {
val book = Book(1, "英语")
val (id, name) = book
}
data class Book(var id: Int, var name: String)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
上面的示例中,解构book声明了 id,name两个变量。如果只需要id这一个变量时,可以这么做:
val book = Book(1, "英语")
val (id, _) = book
- 1
- 2
- 3
数字字面值中的下划线
对于来说大家都很熟悉了,由11位数字组成,也就是13XXXXXXXXX。这样看一串数字,总觉得别扭。如果可以3-4-4这样的方式显示,其值为13X XXXX XXXX,最好不过了。
现在,Kotlin的数字面值可以使用下划线来分隔数值进行分组:
val oneMillion = 1_000_000
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
fun main(args: Array<String>) {
// Log: 1000000
println(oneMillion)
// Log: ffecde5e
println(hexBytes.toString(16))
// Log: 11010010011010011001010010010010
println(bytes.toString(2))
}