使用了Squirrel一段時間,對這個新語言也有所瞭解了,還是決定寫一個語言本身的介紹,算是在國內拋磚引玉吧。我目前使用的是Squirrel 2.2版,這是一個穩定的版本,文檔也比較齊全。Squirrel 3.0 Alpha版已經出來了,但是沒有什麼文檔,我只大概看了一下。
1:保留字:
Squirrel的保留字與C++幾乎一致,但Squirrel沒有指標,記憶體由虛擬機器管理,不需要手工申請和釋放,所以沒有new和delete關鍵字。Squirrel是弱類型的,所以也就沒有char、float、int、double等關鍵字,值得注意到是Squirrel不支援double,其浮點數內部是float,這可能與Squirrel主要為遊戲設計有關。
Squirrel新增了一些關鍵字,主要有local、typeof、instanceof、resum、yield、delegate、 parent等,其中delegate、 parent關鍵字在Squirrel3.0Alpha 版中似乎有變化,這個以後再討論,resum、yield用於Squirrel的“協程”,可以理解為非搶先式的內部線程(Squirrel虛擬機器是單線程的,一個虛擬機器內部不支援系統的線程,這和Lua很相似)。
delegate、 parent用於類“委託”及父類訪問,這個也可以暫時不考慮。除此之外,Squirrel幾乎跟C++一致。
值得注意的是local關鍵字,Squirrel中的變數是需要定義的,和C++一樣,你可以在程式的任何地方定義,但定義的時候必須使用local關鍵字。使用local表明變數在堆棧裡建立,離開函數則自動銷毀,這與C++在函數內定義變數的方式一致。
2:代碼塊及運算式
Lua很討厭的是do..end來表示代碼塊,反正我不習慣,Squirrel很體貼是使用{..},這就順眼多了。
對於運算式,Squirrel跟C/C++幾乎一致,可以使用+=、-=..等運算子,甚至可以使用
?:三元運算子,Squirrel 3.0版支援Lambda運算式,但我還沒有用過。
3:控制迴圈語句
Squirrel的控制迴圈語句與C/C++也一致,這也是我使用Squirrel的原因之一,Lua的for迴圈就很難用,if..else..
也不夠簡潔。
Squirrel迴圈控制語句與C/C++唯一不一致的是增加了foreach迴圈,而且這個foreach不像Lua一樣需要什麼“閉包”,可以很簡單的使用,例如
foreach(local
i in arrayVar){},這完成對一個數組的遍曆
foreach(local
key,value in tableVar){}, 這完成對一個表達遍曆