如何在Kotlin中使用带有参数值的接收器?

时间:2019-06-06 15:43:26

标签: kotlin

我一直在尝试执行以下操作:

作为锻炼

我需要创建一个具有某些功能的数据类。 一种方法将使用带有参数的接收器来验证参数是否大于类值 结果将是布尔值。

到目前为止,我有这个:

data class Club(val name: String, val members: Int) {
fun isABigClub(code: Int.() -> Boolean) : String {
        val isBig = code(this.members)
        return " Your club is a big club? ${isBig}"
    }
}

我创建了具有名称和成员人数的班级俱乐部。

我创建了一个方法调用isABigClub,该方法仅检查是否大于我发送的特定数字...

我以此方式调用

fun main() {
    val isBigClub = club.isABigClub { this > 9 }
    println(isBigClub)

}

按预期工作。

在阅读文档https://kotlinlang.org/docs/reference/lambdas.html#function-literals-with-receiver和其他帖子What is a purpose of Lambda's with Receiver? What is a "receiver" in Kotlin?时,无法在接受参数的同时使用接收器。

我想将比较逻辑封装在数据类中...类似这样

fun isTheBiggestClub(club: Int.(biggestClub: Int) -> Boolean) : Boolean {
        return club(this.members, SOME_RECEIVED_VALUE )
    }

我实际上想在上一个示例this > 9

中发送类似的内容

类似club.isTheBiggestClub { this(10) }

我不知道如何发送或如何在退货时阅读它,还没有找到有关它的信息,甚至有可能吗?知道如何吗?

1 个答案:

答案 0 :(得分:0)

您的club方法返回一个布尔值,而isTheBiggestClub方法返回一个String。这可能是问题所在。