2009-10-20 4 views
7

Lorsque vous utilisez parenscript si j'exécutePourquoi les fonctions de parenscript sont-elles modifiées en minuscules?

 
(parenscript:ps 
(slot-value ($ "#mytextarea") 'selectionStart)) 

Il produit le javascript

 
$('#mytextarea').selectionstart; 

Notez que selectionStart est maintenant selectionstart. Il a perdu la majuscule S sur le Start! Comment est-ce que je garde cette majuscule S autour?

+2

Par défaut, les formulaires Common Lisp (que Parenscript prend en entrée) sont pliés en majuscules par le lecteur. 'selectionStart' deviendra' SELECTIONSTART', lequel Parenscript probablement alors bascule quand il génère une sortie JavaScript. – Pillsy

Répondre

7

parenscript convertira automatiquement de la convention de nommage Lisp (tirets séparant les mots) à CamelCase, donc:

(parenscript:ps 
(slot-value ($ "#mytextarea") 'selection-start)) 

résultats dans

"$('#mytextarea').selectionStart;" 
+1

Si vous avez besoin d'une lettre majuscule initiale dans votre symbole, vous devrez préfixer le nom avec un astérisque. –

1

Comme le fait remarquer Pillsy, tous les symboles sont-tubé supérieure par par défaut quand ils sont lus par le compilateur Lisp. Il y a un moyen de l'éteindre, cependant. Voir le CLHS, 23.1.2 (Effect of Readtable Case on the Lisp Reader), et la description de l'accesseur readtable-case pour plus de détails. À titre d'exemple, vous pouvez activer le mode « inversion » (ce qui est sans doute le seul cadre pratique qui est également sensible à la casse) en mettant ce qui suit dans votre fichier source Lisp:

#.(setf (readtable-case *readtable*) :invert) 

Malheureusement, parenscript ne semble pas de faire beaucoup usage d'un paramètre personnalisé de lecture-écriture, même si cela pourrait (et, à mon avis, devrait) le faire.

+0

Comment diriez-vous que Parenscript peut faire le meilleur usage de readtable-case? Le compilateur Parenscript obtient du code en tant qu'expressions s avec des symboles, donc il ne sait pas comment les noms de symboles ont été lus. Il y a maintenant une fonction de compilation dans laquelle vous pouvez personnaliser le lecteur, mais cela ne fonctionnera pas . – vsedach

+0

@vsedach C'est vrai. Pourtant, à mon avis, il est assez clair que faire avec des symboles de casse-mêle (il suffit de les laisser comme ils sont), donc la seule question qui reste est de savoir quoi faire à propos des symboles majuscules et minuscules. Personnellement, je suggérerais soit de supposer: INVERT par défaut ou tout simplement down-casing tous ces symboles (pour rétrocompatibilité) et en faire un réglage tout comme READTABLE-CASE est. –

Questions connexes