Kotlin中的lambda作业如何

时间:2019-02-17 10:49:39

标签: android lambda kotlin

为了实现Handler().postDelayed(),我需要在Runnable的第一个参数中添加一个postDelayed()对象:

private fun blankFields() {
    blank_fields_error.visibility = View.VISIBLE
    Handler().postDelayed({blank_fields_error.visibility = View.INVISIBLE}, 5000)
}

我试图了解{blank_fields_error.visibility = View.INVISIBLE}是lambda的原因仅仅是因为它被包裹在{}中。这是否意味着如果包装在{}中,则任何赋值都可以是lambda吗?

2 个答案:

答案 0 :(得分:4)

简单的{}

的简短版本
{ (parameters) /* From 0 to n */ ->
   // Do with it
}

parameter可以用关键字 it 代替,因为它只是一个参数,并且不需要显示(如果只有一个参数)。

在您的情况下,{}没有参数。因此它将是一个无参数函数。

在Kotlin中,lambda是用作另一个函数参数的函数(  高阶函数)。

在您的情况下,lambda是表示可运行接口的函数(请注意,如果您使用的是Kotlin,则它是一个函数)。 postDelayed取一个可运行的()->Unit,并取一个长值。

答案 1 :(得分:3)

如果 code 用花括号括起来,则它是lambda。 Lambda是匿名函数,其参数列表在某些情况下可能会省略。无论您在这些花括号中(参数列表之后)放置的代码是函数的主体。

可以是单个语句或表达式:

{ println("Hello") }
{ a = 1 }

或任意多行代码:

{
    println(1)
    println(2)
    println(3)
}

我建议查看official documentation about lambdas以获得更多信息。