首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的元括号错误

奇怪的元括号错误
EN

Stack Overflow用户
提问于 2013-10-14 20:11:29
回答 1查看 119关注 0票数 2

在编译以下Metapost文件时:

代码语言:javascript
复制
beginfig(1);
def f(expr n) =
  if n=0: 0
  else: 1
  fi;
enddef;
show f(0)+1;
endfig;
end

我希望得到输出1(因为f(0)等于0,f(0)+1应该是1!)。然而,Metapost抱怨Isolated expression.

当我把表达式放在括号中时:show (f(0)+1),事情就变得更奇怪了。错误消息是:Missing ')' has been inserted. (第一个引号应该是一个反向引号,但我不知道如何转义它)。到底哪里有不匹配的括号??

谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-28 08:42:33

def命令只是将一个名称扩展到它的定义中,因此您可以从字面上得到:

代码语言:javascript
复制
show if 0=0: 0 else: 1;+1;

中间的分号是问题所在,所以让我们去掉它:

代码语言:javascript
复制
beginfig(1);
def f(expr n) =
  if n=0: 0
  else: 1
  fi
enddef;
show f(0)+1;
endfig;
end

这就产生了正确的扩展:

代码语言:javascript
复制
show if 0=0: 0 else: 1+1;

并按预期输出1

另外,我建议对更重的宏定义使用begingroup...endgroup,对于较轻的宏定义至少使用括号:例如,

代码语言:javascript
复制
def f = 1 + 2 enddef;
show f * 2;

给出1 + 2 * 2,这与预期的不一样:

代码语言:javascript
复制
def f = (1 + 2) enddef;
show f * 2;

这就给了(1 + 2) * 2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19368472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档