on replace句


図 3.4. 変数宣言

'on' 'replace' [変数名] [ '[' 変数名 '..' 変数名 ']' '=' 変数名 | '=' 変数名] ブロック

on replace句は、もしあれば、変数の値が変化(初期値の割り当ても含めて)するたびに、そのブロックが実行されます。

オプションのパラメータは、何が変わったかについての情報を与えます。

on replace 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, lastIndexnewElementsは変化のあった配列の部分だけを参照することに注意してください。

[To do: コンセプトをさらに説明する。bindより下位にあることを注意する。]

[To do: 最初に断片を要約する。クロスリファレンスを追加する。]


Home