「上記のコード行は psi.subtotal と Total を追加し、結果を Total に格納します」は、コードが何をすべきかのかなり良い要約です。
PostScript には組み込みの通貨型がありません (PostScript 言語リファレンス第 3 版、セクション 3.3 を参照)。通貨型のようなものを作成するのはそれほど難しくありません。これを行う 1 つの方法は、カスタムの追加演算子を定義することです。
変数は通常、オブジェクト (数値など) をオペランド スタックにプッシュすることによって機能します。組み込みの add 演算子は、数値に対してのみ機能します (同書、527 ページ)。たとえば、文字列で試してみると、「typecheck」エラーが表示されます。
ただし、提供するコードでは、psi.subtotal と Total が通貨値であるという保証はありません (通貨が意味するものは何でも)。コードが標準の「追加」を実行するかどうかを知る方法はありません。
エラーの詳細と、コードが実行される前に Total と psi.subtotal がどのように定義されているかを知っておくと役立ちます。add が再定義されているかどうか。
次のコードは、コードが 2 つの異なる意味を持つ方法を示しています。
(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