2011-09-25 25 views

Respuesta

10

Probar 3.14159 20 string cvs show.

string necesita un tamaño y deja la cadena creada en la pila. cvs necesita un valor y una cadena para almacenar el valor convertido.

Si estás haciendo un montón de conversiones de series, puede ser más eficiente para crear una cadena y reutilizarla en cada conversión:

/s 20 string def 
3.14159 s cvs show 
11

Un idioma común es el uso de una cadena literal como plantilla.

1.42857 (  ) cvs show 

Incluso puede hacer una salida formateada presentando cvs con varias subcadenas de una cadena más grande.

%....... 
(2/7 =  ) dup 6 7 getinterval 
2.85714 exch cvs pop show 

Pero el Ghostscript Style Guide lo prohíbe. Y es prácticamente la única guía de estilo Postscript publicada que tenemos. (A discussion about this en comp.lang.postscript.) Por lo tanto, una recomendación común es asignar una nueva cadena cuando la necesite y dejar que el recolector de basura se gane.

4.28571 7 string cvs show 

Como último recurso, el hacker verdaderamente perezosa secuestrar =string, la incorporada en el búfer de 128 bytes utilizado por = y == a números de salida (utilizando, por supuesto, nuestro amigo cvs).

5.71428 =string cvs show 

Y si te gusta que uno, que se puede combinar con = 's otro truco: nombres evaluados inmediatamente.

{ 7.14285 //=string cvs show } % embed =string in this procedure 

Esto reduce ese microsegundo extra y hace que sea mucho más difícil inspeccionar interactivamente el código. Llamar al == en este procedimiento no revelará el hecho de que está usando =string; se ve como cualquier otra cadena.


un truco más para la bolsa, desde a post by Helge Blischke in comp.lang.postscript. Esta es una forma simple de obtener un entero cero rellenado.

/bindec   % <integer> bindec <string_of_length_6> 
{ 
     1000000 add 7 string cvs 1 6 getinterval 
}bind def 
+1

"1000000 agregar 7 cuerdas cvs 1 6 getinterval" - Buen truco :-) –

Cuestiones relacionadas