У меня есть набор результатов JDBC (назовите его rs), который я хочу просмотреть, отслеживая, в какой итерации я сейчас нахожусь.Для простоты, скажем, мы просто хотим напечатать каждый индекс в строке, как в следующем фрагменте:
var i = 0
while ( rs.next() ) { println(i++) }
Моя цель - избежать использования переменной и придерживаться более функционального стиля.
Поскольку набор результатов JDBC не является итератором, я не могу просто использовать rs.withIndex { println(it) }
.
Я реализовал следующую функцию iwhile
, которая в значительной степени выполняет то, что я хочу:
tailrec fun iwhile(cond: () -> Boolean, i: Int = 0, f : (Int) -> Unit): Unit {
if (cond ()) { f(i); iwhile(cond, i + 1, f) }
}
Меня беспокоит только то, как вызвать эту функцию: мне нужно написать либо
iwhile({ rs.next() }) { println(it) }
iwhile({ rs.next() }) { i -> println(i) }
, в то время как в идеале я бы хотел написать:
iwhile ( rs.next() ) { println(i) }
Обратите внимание наотсутствие скобок вокруг предиката и имя по умолчанию i
вместо it
Я знаю, что это вопросы Нуба, но есть ли способ написать в это время, чтобы я мог использовать последний синтаксис?Почему я могу написать while ( rs.next() ) { println("hello") }
, а не iwhile ( rs.next() ) { println("hello") }
?