2009-10-20 30 views
7

當使用parenscript如果我執行爲什麼將parenscript函數更改爲全部小寫?

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

它產生的JavaScript

 
$('#mytextarea').selectionstart; 

注意selectionStart現在selectionstart。它在Start上丟失了大寫字母S! 如何保留大寫字母S?

+2

默認情況下,Common Lisp表單(Parenscript作爲輸入)由閱讀器進行大小寫摺疊(大寫)。 'selectionStart'將變成'SELECTIONSTART',Parenscript可能會在生成JavaScript輸出時降低。 – Pillsy 2009-10-23 02:58:42

回答

7

Parenscript將自動從口齒不清轉換命名約定(破折號分開的話),以駝峯,所以:

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

導致

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

如果您在符號中需要首字母大寫字母,則需要在名稱前加星號。 – 2009-10-22 06:36:14

1

作爲Pillsy指出,所有的符號由上外裝當它們被Lisp編譯器讀取時的缺省值。不過,有一種方法可以解決這個問題。有關詳細信息,請參閱CLHS, 23.1.2 (Effect of Readtable Case on the Lisp Reader),以及訪問者readtable-case的說明。舉個例子,你可以啓用「反轉」模式(這是可以說,這也是區分大小寫的唯一可行的設置)通過將以下到您的Lisp源文件:

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

不幸的是,ParenScript似乎並不儘量利用定製的可讀性設置,儘管它可以(並且在我看來應該)這樣做。

+0

你會怎麼說Parenscript可以充分利用readtable-case? Parenscript編譯器將代碼作爲帶符號的s表達式,因此它不知道如何讀入符號名稱。現在有一個編譯文件函數,您可以在其中定製讀取器,但不適用於所有PS代碼。 – vsedach 2010-02-17 08:17:35

+0

@vsedach確實如此。儘管如此,在我看來,很明顯,如何處理混合大小寫的符號(只是讓它們保持原樣),所以剩下的唯一問題就是如何處理全大寫和全小寫符號。就個人而言,我建議或者假設:默認情況下是INVERT,或者簡單地向下包裝所有這些符號(爲了向後兼容性),並使其成爲與READTABLE-CASE相同的設置。 – 2010-02-24 22:06:20

相關問題