0

我试图在 MetaPost 宏中连接一些字符串,其中一些来自数字参数。但是,我收到一条错误消息“将刷新额外的令牌”。

问题的本质在于以下代码段:

    def foo(expr a) =
      show a; % this prints 1
      show str a; % this prints "" and crashes
    enddef;
    
    show str 1; % this prints "1"
    foo(1);

使用 str 将数字更改为字符串适用于宏外部,但不适用于宏内部。为什么?

4

1 回答 1

1

`str' 返回后缀的字符串表示形式,而不是数值。1是后缀。

  • str 1是有效的 ( "1") 因为1是后缀。
  • str -1无效,因为没有后缀-1

但是等等……[1][-1]都是后缀,str[1]呈现"1"(是的,没有[])并且str[-1][-1]

将整数或浮点数转换为字符串的正确函数是decimal.

可以用 重新实现decimalstr只是为了好玩:

% Integer to string without decimal
vardef funny_decimal(expr num) = 
   save s; string s; s=str[num]; % [] needed to evaluate num
   if substring(0,1) of s = "[":
      substring (1,length(s)-1) of s
   else:
      s
   fi
enddef;
于 2021-05-08T17:36:13.113 回答