【问题标题】:how to use a receiver with parameter value in Kotlin?如何在 Kotlin 中使用带参数值的接收器?
【发布时间】:2019-06-06 15:43:26
【问题描述】:

我一直在尝试做以下事情:

作为练习

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

到目前为止,我有这个:

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) }

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

【问题讨论】:

  • 你能再解释一下用例吗?为什么你觉得这里需要使用 Lambda 和 Receiver?
  • @Todd 我基本上需要能够使用带参数的接收器(我在文档上阅读)我的用例是虚构的,但我想例如能够从相同的数据类(在本例中为 "isTheBiggestClub" ),但这种方法应该能够接收外部参数,所以我想发送一个值。其他示例可能是我想发送例如方法 add(value: Int) 以使用我的数据类的内部值进行添加...

标签: kotlin


【解决方案1】:

club 方法返回布尔值,而isTheBiggestClub 方法返回字符串。这可能是问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-03
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多