Я делаю Упражнение Котлина Коанса по функциям расширения коллекции и мне интересно, как можно обнаружить переменную customers из функции:
fun Shop.getSetOfCustomers(): Set<Customer> = customers.toSet()
data class Shop(val name: String, val customers: List<Customer>)
data class Customer(val name: String, val city: City, val orders: List<Order>) {
override fun toString() = "$name from ${city.name}"
}
data class Order(val products: List<Product>, val isDelivered: Boolean)
data class Product(val name: String, val price: Double) {
override fun toString() = "'$name' for $price"
}
data class City(val name: String) {
override fun toString() = name
}





Когда вы пишете функцию расширения, вы можете написать как будто, что вы были внутри класса в реальном методе. Таким образом, внутри расширения на Shopthis относится к экземпляру Shop, для которого было вызвано расширение, и this.customers также доступен (поскольку он общедоступен, вы не можете получить доступ к закрытым членам в расширении).
Затем, как и в классе, вы также можете опустить this при ссылке на свойство или функцию того же класса, поэтому просто customer в расширении.
Разве последний набор круглых скобок (круглых скобок) не должен быть скобками (фигурными скобками)?
Спасибо, сработало, но почему в фигурных скобках? @gidds Документы имеют круглые скобки: kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/…
Спасибо. Можете ли вы также сказать мне, почему я получаю здесь ошибку определения типа?
fun Shop.checkAllCustomersAreFrom(city: City): Boolean = customers.all(it.city == city)- выводBoolean, и я возвращаюBoolean, так что это должно работать.