"la ligne de code ci-dessus ajoute psi.sototal et Total, puis stocke le résultat dans Total" est un assez bon résumé de ce que le code devrait faire.
PostScript n'a pas de type de devise intégré (reportez-vous à la section Référence du langage PostScript - 3ème édition, section 3.3). Ce ne serait pas trop difficile de créer quelque chose comme un type de devise. Une façon de le faire serait de définir un opérateur d'ajout personnalisé. Une variable fonctionne généralement en poussant un objet (tel qu'un nombre) sur la pile d'opérandes. L'opérateur d'ajout intégré ne fonctionne que sur les nombres (ibid., Page 527). Si vous l'essayez avec des chaînes, par exemple, vous verrez une erreur 'typecheck'.
Avec le code que vous fournissez, cependant, il n'y a aucune garantie que psi.sototal et Total sont des valeurs monétaires (quelle que soit la devise). Il n'y a aucun moyen de savoir si le code exécute le standard 'add'.
Il serait utile de connaître les détails de l'erreur, et comment Total et psi.sototal sont définis avant l'exécution du code. Et si ajouter a été redéfini.
Le code suivant montre comment votre code peut signifier deux choses différentes.
(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
Ceci est fondamentalement 'Total' (le nom) =' psi.subtotal' (une valeur) + 'Total' (la valeur, encore une fois). Toutefois, je ne connais pas la possibilité d'utiliser des types de données ou des devises réels dans PostScript. – Joey
Il n'y a rien de mal avec le code que vous avez posté. Cela fonctionne très bien sur mon interprète. Veuillez réduire votre programme à un cas de problème qui échoue réellement, et décrivez également l'erreur réelle que vous obtenez. –