我注意到 Remove From() 函数没有按预期工作(并且它的文档在脚本索引和 JMP 帮助中都写错了)。 从列表中删除最后一个元素时,它的行为似乎不合理。
我已就此联系了 JMP 支持。 根据他们的预期行为如下(与我期望的相同):
预期的行为是 Remove From 返回删除的项目,如您的示例显示的前 9 个项目。此外,它通过删除项目来修改输入容器。
如果他们知道何时修复此问题并更新文档,我还没有收到他们的回复。 如果我收到时间线的回复,我会在这里报告。
示例和一个“解决方法”(如果我真的需要与 Remove From 相同的行为,我现在将为它编写自己的函数):
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^"));
);
感谢您报告此事。请注意,此错误适用于对向量(矩阵)上使用的 RemoveFrom() 的调用,不适用于列表容器。
对于向量,您的解决方法似乎是合理的。如果您在列表中使用此解决方法,请记住您将创建第一个元素的副本。对于大多数类型,这很好——复制引用显示框、数据表或平台的元素只会创建引用同一对象的另一个符号。如果列表元素包含大型矩阵或关联数组等项目,您将创建此对象的副本。这也可能不会产生很大的明显影响,但解决方法的语义略有不同。