lset - リストの1つの要素を変更します。
lset varName ?index ...? newValue
lsetコマンドは1つの引数varName を受け取り、Tclリストを含む変数の名前と解釈されます。同時に0個以上のリストへのindex
も受け取ります。
これらのインデックスはコマンドラインで連続して現れるか、Tclリストに集められて1つの引数として現れます。それは最終的に、varNameの要素への新しい値として使われます。
インデックスが現れない場合、このコマンドは以下のフォーマットになります。
lset varName newValue
または
lset varName {} newValue
この場合には、newValueは変数varNameの古い値に置き換えます。
単一のインデックスを表示されたとき、lsetコマンドはvarName変数の内容をTclリストとして扱います。それはindex番目の要素を指します(
0がリストの最初の要素を示します) 。lsetはリストを解釈する際、中括弧と引用符、およびバックスラッシュに関してはTclコマンドインタープリタと同じルールに従います。但し、変数置換やコマンド置換は発生しません。このコマンドは指定された要素がnewValueに置き換えされることで新しいリストを作成します。この新しいリストは変数varNameに格納され、lsetコマンドの戻り値として返されます。
index が負数かつvarNameの要素個数より大きい場合、エラーが発生します。
index は値endの場合、リストの最後の要素を参照します。end-integer
はリストの最後の要素から指定された整数オフセットを引いた要素を示します。
余分のindex 引数が提供されるた場合、各引数は順に前のインデックス操作結果
であるサブリストの要素を指します。したがって、スクリプトはサブリストの要素を変更できます。コマンド、
lset a 1 2 newValue
または
lset a {1 2} newValue
はサブリスト1の要素2をnewValueに置き換えます。
各index引数に現れる整数は0また0より大きくなければなりません。各index引数に現れる整数は対応するリストの長さより絶対に少なくなければなりません。すなわち、lsetコマンドはリストのサイズを変更できません。インデックスが可能範囲の外にある場合はエラーが報告されます。
以下の各例において、xの初期値は
set x [list [list a b c] [list d e f] [list g h i]]
=> {a b c} {d e f} {g h i}
です。
生成された返り値は、xの 新しい値にもなります。
lset x {j k l} => j k l
lset x {} {j k l} => j k l
lset x 0 j => j {d e f} {g h i}
lset x 2 j => {a b c} {d e f} j
lset x end j => {a b c} {d e f} j
lset x end-1 j => {a b c} j {d e f}
lset x 2 1 j => {a b c} {d e f} {g j i}
lset x {2 1} j => {a b c} {d e f} {g j i}
lset x {2 3} j
次の例において、xの初期値は
set x [list [list [list a b] [list c d]] \
[list [list e f] [list g h]]]
=> {{a b} {c d}} {{e f} {g h}}
です。
生成された返り値は、xの 新しい値にもなります。
lset x 1 1 0 j => {{a b} {c d}} {{e f} {j h}}
lset x {1 1 0} j => {{a b} {c d}} {{e f} {j h}}
list, lappend, lindex, linsert, llength, lsearch, lset, lreplace, lsort
element, index,
list, replace,
set
Copyright © 2001 by Kevin B. Kenny. All rights reserved.
Copyright © 1995-1997 Roger E. Critchlow Jr.
|