Local variable name 'pay_status' doesn't match regex '[a-z][A-Za-z\d]*'

时间:2022-02-02 21:17:28

最近总是因为一些异常警告搞得有点崩溃,于是打算以后把遇到的异常都总结起来,方便以后查看。


今天,在使用Kotlin写项目的时候遇到一个常量名称定义的警告,如下:

Local variable name 'pay_status' doesn't match regex '[a-z][A-Za-z\d]*'

刚看到这个警告的时候我在想,这要正则有什么关系?于是我在我平常加的一些群里想看看有没有哪个大神能够知道,把图贴上去以后,没一个人鸟我,我好受伤!Local variable name 'pay_status' doesn't match regex '[a-z][A-Za-z\d]*'

他们都在讨论自己的刀功,菜功!为什么?你们想问,因为到中午了,哈哈~你懂了么?

不说费话了,告诉你们原因:

这是因为我常量名称中带有“_”。把它去了就好了,原因嘛:

在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))
}