Mir ist aufgefallen, dass die Remove From()-Funktion nicht wie beabsichtigt funktioniert (und ihre Dokumentation sowohl im Scripting Index als auch in der JMP-Hilfe falsch geschrieben ist). Es scheint sich irrational zu verhalten, wenn das letzte Element aus der Liste entfernt wird.
Ich habe mich diesbezüglich an den JMP-Support gewandt. Laut ihnen ist das beabsichtigte Verhalten wie folgt (so wie ich es erwarten würde):
Das erwartete Verhalten ist, dass Remove From die entfernten Elemente zurückgibt, wie Ihr Beispiel für die ersten 9 Elemente zeigt.Außerdem ändert es den Eingabecontainer, indem es das/die Element(e) entfernt.
Ich muss noch von ihnen hören, ob sie über den Zeitplan wissen, wann dies behoben und die Dokumentation aktualisiert wird. Ich werde mich hier wieder melden, wenn ich mit der Zeitleiste zurückhöre.
Beispiel und ein "Workaround" (wenn ich wirklich das gleiche Verhalten wie Remove From brauche, werde ich vorerst meine eigene Funktion dafür schreiben):
Names Default To Here(1);
m = 1::10;
For Each({item}, m,
earlier_m = m;
// Returns: The original source with the items deleted.
// Doesn't this return deleted list (except when it is last element...)
removed = Remove From(m, 1);
Print(Eval Insert("^removed^ removed from ^earlier_m^"));
);
// workaround?
m = 1::10;
For Each({item}, m,
earlier_m = m;
removed = m[1];
Remove From(m, 1);
Print(Eval Insert("^removed^ removed from ^earlier_m^"));
);
Danke, dass du das gemeldet hast.Beachten Sie, dass dieser Fehler für Aufrufe von RemoveFrom() gilt, die für einen Vektor (Matrix) verwendet werden, und nicht für Listencontainer.
Ihre Problemumgehung scheint für Vektoren angemessen zu sein.Wenn Sie diese Problemumgehung für eine Liste verwenden, denken Sie daran, dass Sie eine Kopie des ersten Elements erstellen.Für die meisten Typen ist dies in Ordnung - das Kopieren eines Elements, das auf ein Anzeigefeld, eine Datentabelle oder eine Plattform verweist, erstellt nur ein weiteres Symbol, das auf dasselbe Objekt verweist.Wenn die Listenelemente Elemente wie große Matrizen oder assoziative Arrays enthalten, erstellen Sie eine Kopie dieses Objekts.Dies hat möglicherweise auch keine großen spürbaren Auswirkungen, aber die Semantik der Problemumgehung ist etwas anders.