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 ページのデータ型と66 ページの算術演算子で、非常によく書かれており、比較的理解しやすいものです。

于 2010-11-14T14:57:37.060 に答える
1

「上記のコード行は 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
于 2011-06-04T10:53:26.933 に答える