操作数函数在过程中的工作方式不同
我们来定义一个过程
[> 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}
Let's define a procedure
[> f:=proc(s)
s:={1}: {op(s),2};
end proc:
then
[> f('s');
{2, {1}}
but
[> s:={1}: {op(s),2};
{1, 2}
So why do we have a different result?
Using a local variable we can get the expected result though:
[> f:=proc(s) local S;
S:={1}: s:=S; {op(S),2};
end proc:
f('s');
{1, 2}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您对过程的调用被编写为对作为参数传递的不带引号的名称产生副作用。 (我个人认为这是一种邪恶的编程实践,不良后果并不意外。)
由于您已将名称括在 uneval 引号中,因此额外的
eval
允许您访问。例如,Your call to the procedure is written to have a side-effect on the uneval-quoted name passed as argument. (Personally I think that is an evil programming practice, and ill consequences are not unexpected.)
Since you have wrapped the name in uneval-quotes, then an extra
eval
allows you access. Eg,