Ответ на ваш вопрос лежит в String.apply()
или StringBuilder.apply()
, если быть более точным.
Видите ли, foreach
ожидает функцию. В более точных словах, выражение, которое оценивает функцию.
Итак, сначала он вычислит выражение для получения функции, затем применяет эту функцию для 0 until 10
, поэтому при рассмотрении первой итерации внешнего foreach
вы получаете c = 'h'
и далее,
(0 until 10).foreach(res += c )
Здесь res += c
вернет res
после добавления к нему h
.
Итак ... оцененная функция равна res
или res.apply
с res = "h"
. Следовательно, вышесказанное на самом деле,
(0 until 10).foreach("h".apply)
Итак, res.apply(0)
идет хорошо ... но res.apply(1)
не удается с StringIndexOutOfBoundsException
.