2017-09-05 4 views
0

Ich habe dieses Problem mit einem lset-Befehl in meinem Skript. Wenn ich den Befehl erstelle, bestimmte Werte in der Liste zu ersetzen, zeige ich am Ende alle Elemente der Liste an.lset funktioniert nicht richtig

anstatt den Wert des $ index in der Liste auf einen Wert von 0 zu ändern, wird die gesamte Liste in den Befehlsfenstern angezeigt! die Liste wurde lrepeat

set gamma_aa [lrepeat [expr int($nbrx*$nbry)] 0.] 

Habe ich etwas verpasst eine einzige Liste mit erstellt?

+2

Das ist, wie LSet funktioniert. Es ändert ein Element und gibt den gesamten (aktualisierten) Listenwert zurück. –

+0

Oh, danke für die Info! – John

Antwort

0

Der Befehl lset gibt den neuen Inhalt der Liste zurück, ähnlich wie set den neuen Inhalt einer Variablen zurückgibt. Sie können diesen Rückgabewert (normalerweise) ignorieren.

Die tatsächliche Einstellung des Werts in diesem bestimmten Index sollte geschehen sein. Es kann schwierig sein, zu sehen, ob der Wert, auf den Sie ihn gesetzt haben, sich nicht besonders von dem unterscheidet, was zuvor an diesem Index gehalten wurde, oder wenn die indizierte Position weit vom Anfang der Liste entfernt ist.


Auch Sie wirklich brauchen nicht zu tun:

lset gamma_aa [expr int($index)] 0 

Dies sollte auch in allen gesunden Fällen funktionieren:

lset gamma_aa $index 0