Mam następującą metodę. Jego logika jest bardzo prosta, jeśli ustawiono prawe, to wywołanie lewe, gdy ma wartość (nie ma wartości null). Kiedy piszę to w następujący sposób, to działa.Kompilator Kotlina nie może stwierdzić, że zmienna nie jest pusta w pętli do-while.
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
prev = next
next = next.left
while (next != null) {
prev = next
next = next.left
}
}
return prev
}
Jeśli natomiast staram się skrócić kod za pomocą pętli do-while, to już nie mądry rzuca next
do Node
. To pokazuje ten błąd:
Type mismatch.
Required: Node<T>
Found: Node<T>?
Kod następująco:
fun goNext(from: Node): Node? {
var prev : Node = from
var next : Node? = from.right
if (next != null) {
do {
prev = next // Error is here, even though next can't be null
next = next.left
} while (next != null)
}
return prev
}
Dlaczego nie upraszcza się po prostu 'while (next! = Null) {...}'? –
Masz rację! Nie widziałem tego. – biowep