Spec-Zone .ru
спецификации, руководства, описания, API
|
onReplaceClause, если есть заставляет блок выполняться каждый раз значение переменных изменений - включая присвоение его начального значения.
Дополнительные параметры предоставляют информацию о том, что изменяется: на замене oldValue [firstIndex. lastIndex] = newElements {...}
Но эти параметры являются все дополнительными, и в самой простой форме ни один из них не присутствует:
var x = 0 on replace { println("x is now: {x}") }
oldValue параметр обеспечивает предыдущее значение.
var x = 0 on replace oldValue { println("x was {oldValue} and is now: {x}") }
Остающиеся параметры полезны с последовательностями.
var seq = ['A', 'B', 'C', 'D', 'E', 'F'] on replace oldValue[firstIdx .. lastIdx] = newElements { println("replaced {oldValue}[{firstIdx}..{lastIdx}] by {newElements} yielding {seq}") } seq[3] = '$'; insert '#' into seq; delete '$' from seq; delete seq[2]; seq[1..4] = ['X', 'Y']; delete seq;
Который печатает:
replaced [0..-1] by ABCDEF yielding ABCDEF replaced ABCDEF[3..3] by $ yielding ABC$EF replaced ABC$EF[6..5] by # yielding ABC$EF# replaced ABC$EF#[3..3] by yielding ABCEF# replaced ABCEF#[2..2] by yielding ABEF# replaced ABEF#[1..4] by XY yielding AXY replaced AXY[0..2] by yielding
Отметьте, что firstIndex, lastIndex и newElements обращаются только к части последовательности, которая изменилась,
[Чтобы сделать: объясните понятие больше. Отметьте, что это является нижним к привязке]
[Чтобы сделать: краткое введение к частям, плюс перекрестная ссылка]