• Kotlin调用lambda表达式时,lambda中的参数名字省略问题


    先说结论:

    如果lambda表达式只有一个参数,那么在调用该lambda表达式时,可以不指定它的参数名字.在lambda函数体内用it来代表这个参数.
    如果lambda表达式有多个参数,那么在调用该lambda表达式时,必须指定每一个参数的名字.

     1 fun main() {
     2     /*
     3     如果lambda表达式只有一个参数,那么在调用该lambda表达式时,可以不指定它的参数名字.在lambda函数体内用it来代表这个参数.
     4     如果lambda表达式有多个参数,那么在调用该lambda表达式时,必须指定每一个参数的名字.
     5      */
     6 
     7     test1(5) { println("test1 没有it") }
     8     //引用
     9     test1(5,::test0)
    10     println("------------------------------")
    11 
    12 
    13     test2(6) { println("test2 it=$it") }
    14     test2(6,::test00)
    15     println("------------------------------")
    16 
    17 
    18     test3(3, 2) { println("test3 it=$it") }
    19     test3(22,33){a -> println("test3 a=$a 有a就没有it了")}
    20     println("------------------------------")
    21 
    22     test4(22,33){a,b ->
    23         println("test4 a=$a b=$b 没有it")
    24     }
    25     test4(22,33){a,b ->
    26         println("test4 a=$a b=$b 没有it a-b=${a-b}")
    27     }
    28     test4(22,33){_,b ->
    29         println("test4 省略a,只有b=$b 没有it")
    30     }
    31     //如果lambda表达式有两个及以上参数,那么即使lambda表达式的全部的参数都用不到,也不能省略"_,_ -> "
    32     test4(3,4){ _,_ ->
    33         println("test4 省略a和b 没有it")
    34     }
    35     //下面这样写是错误的.如果lambda表达式有两个及以上参数,那么任一参数都要用合法字符串或者_来表示,即使全都用不到也要用相应个数个_代替,
    36 //    test4(3,4){ println("test4")}
    37     test4(1,2,::test000)
    38     println("------------------------------")
    39 
    40     test5 { println("test5 it=$it") }
    41     test5 { a -> println("test5 it=$a") }
    42     //lambda表达式只有一个参数,如果使用" _ -> 函数体 "这种方式来省略的话, 那么"_ ->"是多余的,应该去掉
    43     test5 { _ -> println("test5") }
    44 
    45 
    46 }
    47 
    48 
    49 private fun test0(){println("test0")}
    50 private fun test00(x:Int){println("test00")}
    51 private fun test000(x:Int,y:Int){println("test000 x+y=${x+y}")}
    52 
    53 private fun test1(x: Int, action: () -> Unit) {
    54     action()
    55 }
    56 
    57 private fun test2(x: Int, action: (Int) -> Unit) {
    58     action(x)
    59 }
    60 
    61 private fun test3(x: Int, y: Int, action: (Int) -> Unit) {
    62     action(x)
    63 }
    64 
    65 private fun test4(x: Int, y: Int, action: (Int, Int) -> Unit) {
    66     action(x, y)
    67 }
    68 
    69 private fun test5(action: (Int) -> Unit){action(666)}

  • 相关阅读:
    C++学习笔记十关联容器
    Ubuntu下使用GDB断点Go程序
    各种语言的数字转罗码方法的实现
    为什么 ++i和i++的效果是一样的,试了javascript ,c++ java
    罗马数字转换阿拉伯数字(Java版,考虑较为全面)
    C++学习笔记九顺序容器(二) ForFreeDom 博客园
    智立方 屁话真言108:能盛事者能成事_智立方的杨石头_新浪博客
    腾讯搜搜高管吴军离职的传闻与真相
    罗马数字_百度百科
    快速深入一门语言的几个问题 Shell909090 随笔杂记
  • 原文地址:https://www.cnblogs.com/soclear/p/13786338.html
Copyright © 2020-2023  润新知