“上面的代码行添加了 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