【发布时间】: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