一,代码
class VmListActivity : AppCompatActivity() {
private lateinit var binding: ActivityVmListBinding //binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
//使用binding
binding = ActivityVmListBinding.inflate(layoutInflater)
setContentView(binding.root)
//处理按钮点击事件,创建一个假数据,保存到viewmodel
binding.button.setOnClickListener {
//1 . 调用 无参数 Unit 空类型返回值的 Lambda 表达式 , 分别用两种形式进行调用
println("\n执行 lambda1 调用 : \n")
println("${lambda1.invoke()}")
println("${lambda1()}")
//2 . Int 类型参数 , Int 类型返回值 , 的 Lambda 表达式
println("\n执行 lambda2 调用 : \n")
println("${lambda2.invoke(100)}")
println("${lambda2(100)}")
//3 . 调用 多行代码的 Lambda 表达式
println("\n执行 lambda3 调用 : \n")
println("${lambda3.invoke(200)}")
println("${lambda3(200)}")
//4 . 调用 多个参数的 Lambda 表达式
println("\n执行 lambda4 调用 : \n")
println("${lambda4.invoke(1, 2)}")
println("${lambda4(1, 2)}")
//41. 调用简写形式的lambda表达式,功能同4
println("\n执行 lambda41 调用 : \n")
println("${lambda41.invoke(1, 2)}")
println("${lambda41(1, 2)}")
//42. 调用简写形式的lambda表达式,功能同4
println("\n执行 lambda42 调用 : \n")
println("${lambda42.invoke(1, 2)}")
println("${lambda42(1, 2)}")
//5 . 调用 Lambda 表达式类型作为参数的 Lambda 表达式 , 第 3 个参数是 Lambda 表达式类型的参数
//形式1
println("\n执行 lambda5 调用 : \n")
println("${lambda5.invoke(3 , 4 , lambda4)}")
println("${lambda5(3 , 4 , lambda4)}")
//形式2 调用时直接传递Lambda 表达式
val resSub = lambda5(3, 4, {x,y->x-y})
println("减法表达式,结果:"+resSub)
//形式3 调用形式改变为把代码写到括号外
val resMulti = lambda5(3, 4) {x,y->x*y}
println("乘法表达式,结果:"+resMulti)
}
}
}
// 1 . 无参数 Unit 空类型返回值的 Lambda 表达式
var lambda1 : ()-> Unit = { println("lambda1") }
// 2 . Int 类型参数 , Int 类型返回值 , 的 Lambda 表达式
var lambda2 : (Int)-> Int = { a : Int -> a + 1000}
// 3 . 多行代码的 Lambda 表达式, 最后一行是返回值
var lambda3 : (Int)-> Int = { a : Int ->
println("lambda3 多行代码")
a + 1000
}
// 4 . 多个参数的 Lambda 表达式
var lambda4 : (Int, Int)->Int = { a : Int, b : Int ->
println("lambda4 计算 : a + b = ${a + b}")
a + b
}
// 41 . 简写成一行: 有声明函数类型,函数体中无参数类型
val lambda41 : (Int, Int)->Int = { a,b ->a + b}
// 42 . 简写成一行: 无声明函数类型,函数体中有参数类型,
val lambda42 = { a: Int, b: Int ->a + b}
// 5 . Lambda 表达式类型作为参数的 Lambda 表达式 , 第 3 个参数是 Lambda 表达式类型的参数
var lambda5 : (Int, Int, (Int, Int)->Int)->Int = { a : Int, b : Int, c : (Int, Int)->Int ->
c.invoke(a, b)
}
二,运行结果:
![]()
![]()