zoukankan      html  css  js  c++  java
  • 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)}

  • 相关阅读:
    lua类对象
    toLua初始化碰到的问题
    Unity经验之谈-DoTween动画结束匿名委托闭包之坑
    toLua关于委托没有注册的解决方案
    xLua使用require改变路径加载Lua脚本
    unity常用的比较函数
    Shader中颜色混合的算法
    UnityShader中插值平滑曲线
    Shader中的Uniforms(只读标识)
    ShaderLab中Properties语义块支持的属性类型
  • 原文地址:https://www.cnblogs.com/soclear/p/13786338.html
Copyright © 2011-2022 走看看