操作数函数在过程中的工作方式不同
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}
让我们定义一个过程
[> 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}