Kotlin:应用vs

有什么区别和适用。 从我所知道的下面的代码做同样的事情:

swingElement.apply { minWidth = ENABLED_COLUMN_WIDTH maxWidth = ENABLED_COLUMN_WIDTH preferredWidth = ENABLED_COLUMN_WIDTH } with(swingElement) { minWidth = ENABLED_COLUMN_WIDTH maxWidth = ENABLED_COLUMN_WIDTH preferredWidth = ENABLED_COLUMN_WIDTH } 

有什么区别,我应该使用一个吗? 另外,有些情况下,一个会工作,另一个不会?

有两个区别:

  1. apply接受一个实例作为接收者,同时要求一个实例作为参数传递。 在这两种情况下,实例将在一个块内变成this

  2. apply返回接收者并返回其块内最后一个表达式的结果。

我不确定在哪个功能上可以有一些严格的规定。 通常apply当你需要对一个对象做某些事情并返回时,你可以使用apply 。 而当你需要在一个对象上执行一些操作并返回一些其他对象时,你可以使用或者run 。 我更喜欢run因为在我看来它更具可读性,但这是一个品味的问题。