Spec-Zone .ru
спецификации, руководства, описания, API

на Пункте замены

 Рисунок 3.4. onReplaceClause

onReplaceClause

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 обращаются только к части последовательности, которая изменилась,

[Чтобы сделать: объясните понятие больше. Отметьте, что это является нижним к привязке]

[Чтобы сделать: краткое введение к частям, плюс перекрестная ссылка]