__proto__
- это фактический объект, который используется в цепочке поиска для разрешения методов и т. д. prototype
- это объект, который используется для сборки __proto__
при создании объекта с помощью new
:
( new Foo ).__proto__ === Foo.prototype;
( new Foo ).prototype === undefined;
Используйте downTo как в:
for (n in 100 downTo 1) {
//
}
Как указано другими, правильный ответ:
for (n in 100 downTo 1) {
println(n)
}
Но почему команда Котлина выбрала 100 downTo 1
vs 100..1
?
Я думаю, что синтаксис 100..1
было бы плохо, если мы попытаемся использовать переменные вместо литералов. Если мы набрали
for (n in b..a)
, тогда было бы непонятно, какой цикл мы хотели использовать.
Мы могли рассчитывать на обратный отсчет, но если b
окажется меньше a
, то наша программа будет на самом деле рассчитывать вверх! Это было бы источником ошибок.
Реверсированные диапазоны поддерживаются с помощью унарного оператора минус -
, как в -(1..100)
.
Чтобы вызвать метод в этом диапазоне, вам необходимо окружить его круглыми скобками, как в (-(1..100)).foreach { println(it) }
.
Если вы посмотрите на точную страницу, с которой вы связались, есть предложение для функции reversed
, которая позволила бы вам делать for (n in (1..100).reversed())
, но она пока не реализована. Оператор ..
всегда подсчитывает.