0

Postscript中的以下内容是什么意思

/Total psi.subtotal Total add def\n

这里 ps1.subtotal 是我在其他地方填充的变量,数据类型为货币(例如:10.00 USD)

根据我的理解,上面的代码行添加了 psi.subtotal 和 Total,然后将结果存储在 Total 中。如果是这样,我看到这个 PS 在上面的行出错了。我还在某些地方看到,即使对于整数加法,变量首先转换为字符串,然后对变量执行加法或任何其他操作。是这样吗?

谢谢

4

2 回答 2

1

AFAIK 没有货币数据类型,所以我假设两者psi.subtotal都是Totalreal类型。该add操作将整数数类型的数字相加。PostScript Language Reference写得很好,也相对容易理解,数据类型在PDF的第 48 页,算术运算符在PDF 的第 66 页。

于 2010-11-14T14:57:37.060 回答
1

“上面的代码行添加了 psi.subtotal 和 Total,然后将结果存储在 Total 中”是对代码应该做什么的一个很好的总结。

PostScript 没有内置货币类型(请参阅 PostScript 语言参考第 3 版,第 3.3 节)。创建类似货币类型的东西不会太难。一种方法是定义自定义添加运算符。

变量通常通过将对象(例如数字)压入操作数堆栈来工作。内置的加法运算符仅适用于数字(同上,第 527 页)。例如,如果您尝试使用字符串,您将看到“类型检查”错误。

但是,使用您提供的代码,不能保证 psi.subtotal 和 Total 是货币值(无论货币可能意味着什么)。无法知道代码是否运行标准的“添加”。

这将有助于了解错误的详细信息,以及在执行代码之前如何定义 Total 和 psi.subtotal。以及是否重新定义了add。

以下代码显示了您的代码可能意味着两种不同的事物。

(Using numbers for currencies...) =

/psi.subtotal 42.5 def
/Total 37 def

/Total psi.subtotal Total add def  %%%%%%%%%%%%%%%%%% Your code.

(Total ) print Total ==

(Using strings for currencies...) =

/psi.subtotal (42.50) def
/Total (37.00) def

/standard_add { add } bind def

/currency_add { % stack: str str -- both string reps of numbers
    cvr % stack: str num
    exch % stack: num str
    cvr  % stack: num num
    standard_add           % stack: num
    20 string     % stack: num str
    cvs           % stack: str
}
def

/add { currency_add } def  % Override existing add.

/Total psi.subtotal Total add def  %%%%%%%%%%%%%%%%%% Your code.

(Total ) print Total =

flush
于 2011-06-04T10:53:26.933 回答