{...}内部的代码被称为let函数的 block 参数,而block是另一个函数(或lambda),它接受let的接收器(在本例中,如果它不为null,则为getMeSomeFoo())作为参数,我们在lambda中将此参数命名为foo。对于短块,可以省略foo ->,而使用默认名称it。 let函数是几个所谓的scope functions函数之一。你也可以用同样的方式使用run,但是你必须使用this来代替it。然而,let在这种用法中更常见和惯用。 我做了这个作用域函数表,我发现它是一个有用的参考: | | 返回y| Return y | | --|--|--| |这个| x.应用{ y }|x.run { y }其中(x){ y }| |它| x.也是{ y }| x.let { y }| | - |运行{ y }| run { y } |
2条答案
按热度按时间vptzau2j1#
当您尝试使用
let
和run
时,主要区别在于它们如何公开其目标。let
使用it
关键字公开对象,而run
使用this
关键字公开对象,这使得对象属性和方法在上下文中可用,并且您不再需要编写this
来引用它们。与let
相反,在let
中,每次要调用目标对象的属性或方法时,都必须重复it
。请查看此文档链接以了解差异以及不能使用
let
而应使用run
的情况。rsl1atfo2#
你是正确的,你可以使用
let
来避免空指针异常,但let
本身是不够的。帮助您避免NPE的是?.
操作符(在此处记录)。这有助于使你的代码更简洁:而不是你可以做
(To准确地说,
?.
运算符的直接转换将是if (foo == null) null else foo.bar()
,但我们经常丢弃null情况。现在,将其与
let
函数结合使用,可以使看起来复杂的代码更加简洁(并且可能更具可读性)。而不是:你可以做
{...}
内部的代码被称为let
函数的 block 参数,而block是另一个函数(或lambda),它接受let
的接收器(在本例中,如果它不为null,则为getMeSomeFoo()
)作为参数,我们在lambda中将此参数命名为foo
。对于短块,可以省略foo ->
,而使用默认名称it
。let
函数是几个所谓的scope functions函数之一。你也可以用同样的方式使用run
,但是你必须使用this
来代替it
。然而,let
在这种用法中更常见和惯用。我做了这个作用域函数表,我发现它是一个有用的参考:
| | 返回y| Return y |
| --|--|--|
|这个| x.应用{ y }|x.run { y }其中(x){ y }|
|它| x.也是{ y }| x.let { y }|
| - |运行{ y }| run { y } |