操作数函数在过程中的工作方式不同

operands function works differently inside a procedure

让我们定义一个过程

[> f:=proc(s)
     s:={1}: {op(s),2};
   end proc:

然后

[> f('s');
                            {2, {1}}

但是

[> s:={1}: {op(s),2};
                             {1, 2}

那为什么我们有不同的结果?
使用局部变量我们可以获得预期的结果:

[> f:=proc(s) local S;
     S:={1}: s:=S; {op(S),2};
   end proc:
   f('s');
                             {1, 2}

您对该过程的调用被编写为在作​​为参数传递的 uneval-quoted 名称上有一个 side-effect。 (我个人认为这是一种邪恶的编程习惯,恶果并不意外。)

既然你已经把名字包裹在uneval-quotes中,那么一个额外的eval允许你访问。例如,

f:=proc(s)
   s:={1}; {op(eval(s)),2};
end proc:

f('s');

          {1, 2}