Можно ли включить переменную в тело условия while для Kotlin?

В приведенном ниже коде:

var verticesCount: Int // to read a vertices count for graph // Reading until we get a valid vertices count. while (!Assertions.checkEnoughVertices( verticesCount = consoleReader.readInt(null, Localization.getLocStr("type_int_vertices_count")))) // The case when we don't have enough vertices. println(String.format(Localization.getLocStr("no_enough_vertices_in_graph"), Assertions.CONFIG_MIN_VERTICES_COUNT)) val resultGraph = Graph(verticesCount) 

мы получаем следующую ошибку на последней строке:

 Error:(31, 33) Kotlin: Variable 'verticesCount' must be initialized 

Assertions.checkEnoughVertices принимает переменную безопасного типа в качестве аргумента (verticesCount: Int), поэтому невозможно, чтобы вершины были неинициализированы или null здесь (и мы не получаем соответствующих ошибок в этих строках).

Что происходит на последней строке, когда уже инициализированная переменная снова становится неинициализированной?

    Синтаксис, который вы использовали, обозначает вызов функции с именованными аргументами , а не назначение локальной переменной. Итак, verticesCount = просто объяснение читателю, что значение, которое передается здесь для checkEnoughVertices соответствует параметру этой функции с именем verticesCount . Он не имеет ничего общего с локальной переменной с именем verticesCount объявленной чуть выше, поэтому компилятор считает, что вы все еще должны инициализировать эту переменную.

    В Kotlin присвоение переменной ( a = b ) не является выражением, поэтому оно не может использоваться как значение в других выражениях. Вы должны разделить назначение и условие while-loop для достижения того, чего хотите. Я сделал бы это с бесконечным циклом + условие внутри:

     var verticesCount: Int while (true) { verticesCount = consoleReader.readInt(...) if (Assertions.checkEnoughVertices(verticesCount)) break ... } val resultGraph = Graph(verticesCount) 
    Intereting Posts
    Проблема отзыва Котлина Reactor Flux <MyObject> для Mono <List <MyObject >> Не удалось получить одну из вложенных данных из базы данных Firebase Realtime Kotlin AlarmManager и BroadcastReceiver не работают Ошибка «Расширение с именем» android «не существует» при добавлении проекта Kotlin в Android Ошибка Required Nothing при определении нулевой локальной переменной и ее установка позже в методе Элементы типа «subs» не могут быть использованы. response: -1010: Неправильная попытка потребления FirebaseListAdapter игнорирует orderByChild () и equalTo () SortedList IndexOutOfBoundsException: обнаружена несогласованность. Недопустимая позиция позиции при удалении последнего элемента Ошибка подключаемого модуля: Kotlin бросил непроверенное исключение IllegalStateException Почему я должен возвращать Unit.INSTANCE при реализации на Java функции Kotlin, которая возвращает Unit? Переменный список Obersable <Object> ждет, пока все они закончат, и объедините их в List <Object> > Не удалось применить плагин > Для строки ввода: "" Почему этот способ случайного создания графика несправедлив? Что означает сигнатура функции Kotlin с T. ()?