如何使用 Kotlin 的调用运算符获取对象实例化的接收者

How to use Kotlin's invoke operator to get a receiver on object instantiation

class Family() {
    fun addMember(name: String) {}

    inline operator fun invoke(body: Family.() -> Unit) {
        body()
    }
}

使用 invoke 运算符函数后,我可以这样做:

val family = Family().invoke { this:
    addMember("Android")
}

我见过代码结构,其中声明只是通过这样做。

val family = Family { this:
        addMember("Android")
    }

在当前情况下,可以在实例上调用调用,即

val family = Family()

family {
    addMember(...)
}

如果我理解正确,您想创建 Family 的新实例并将块应用到对象中,您可以通过将函数放在同伴下来实现。

class Family {
    fun addMember(name: String) {}

    companion object {
        inline operator fun invoke(body: Family.() -> Unit): Family {
            return Family().apply(body)
        }
    }
}

现在:

val family = Family {
    addMember(...)
}