Использование переменной класса в функции расширения класса - PullRequest
0 голосов
/ 10 марта 2019

Я выполняю упражнение Kotlin Koans по функциям расширения коллекции , и мне интересно, как переменная 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
}

1 Ответ

4 голосов
/ 10 марта 2019

Когда вы пишете функцию расширения, вы можете написать ее , как если бы вы были внутри класса в реальном методе. Таким образом, внутри расширения на Shop, this относится к экземпляру Shop, к которому было вызвано расширение, и this.customers также доступен (поскольку он общедоступный, вы не можете получить доступ к закрытым членам в расширении).

Тогда, как и внутри класса, вы также можете опустить this при ссылке на свойство или функцию того же класса, следовательно, просто customer в расширении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...