2010-11-14 81 views
0

是什麼在後記後記一般問題

/Total psi.subtotal Total add def\n 

以下幾條平均ps1.subtotal是我在其他地方居住,併爲貨幣數據類型的變量(例如:10.00美元)

按我的理解上面的代碼行添加psi.subtotal和Total,然後將結果存儲在Total中。 如果是這樣,我看到這個PS在上面的線出錯。我在一些地方也看到,即使對於整數加法,變量也首先轉換爲字符串,然後對變量執行加法或任何其他操作。 是這樣嗎?

感謝

+0

這基本上是'Total'(name)='psi.subtotal'(一個值)+'Total'(值,再次)。不過,我並不熟悉在PostScript中使用實際數據類型或貨幣的功能。 – Joey 2010-11-14 14:52:17

+0

您發佈的代碼沒有任何問題。它對我的翻譯工作正常。請將您的程序降至實際失敗的問題案例,並描述您所得到的實際錯誤。 – 2010-11-14 15:00:13

回答

1

AFAIK沒有貨幣數據類型,所以我想這兩個psi.subtotalTotal是類型真正的。 add操作添加整數實數PostScript Language Reference寫得相當不錯,而且相對容易理解,其數據類型爲page 48,算術運算符爲page 66。 「

1

」上面的代碼行添加了psi.subtotal和Total,然後將結果存儲在Total中「是對代碼應該做什麼的很好的總結。

PostScript沒有內置貨幣類型(請參閱PostScript語言參考第3版,第3.3節)。創建類似貨幣類型的東西並不難。一種方法是通過定義一個自定義添加操作符。

變量通常通過將一個對象(如數字)推到操作數棧上來工作。內置的add運算符只能用於數字(同上,第527頁)。例如,如果您嘗試使用字符串,您將看到'typecheck'錯誤。

但是,您提供的代碼不能保證psi.subtotal和Total是貨幣值(無論貨幣是什麼意思)。沒有辦法知道代碼是否運行標準的「添加」。

這將有助於瞭解錯誤的細節,以及如何在代碼執行之前定義Total和psi.subtotal。並且是否添加已被重新定義。

下面的代碼顯示了你的代碼如何表示兩種不同的東西。

(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