Kotlin: модификатор видимости меняет тип анонимного объекта - PullRequest
0 голосов
/ 19 октября 2018

Удаление модификатора private для myScope (строка 4) в следующем рабочем коде нарушит код.Причиной этого является изменение типа myScope.Если для видимости установлено значение private, тип: anonymous object : Scope.Без private тип переключается на Scope.Как я могу исправить это поведение?

interface Scope
operator fun<SD: Scope> SD.invoke(block: SD.() -> Unit) = block()

private val myScope = object : Scope {
    fun Int.myScopedExtFunction() = 1337
}

fun usage() {
    myScope {
        1.myScopedExtFunction()
    }
}

Здесь обе версии в Android Studio: enter image description here

1 Ответ

0 голосов
/ 19 октября 2018

Это поведение является намеренным.См. документацию :

Обратите внимание, что анонимные объекты могут использоваться как типы только в локальных и частных объявлениях.Если вы используете анонимный объект в качестве возвращаемого типа публичной функции или типа открытого свойства, фактическим типом этой функции или свойства будет объявленный супертип анонимного объекта или Any, если вы не объявили какой-либо супертип,Члены, добавленные в анонимный объект, не будут доступны.

...