Newlisp 學習筆記

使用美圓符號命名變量,直接就設置成全局變量了,這個和 Ruby 同樣,一比較 Ruby 強迫性的命名規範有點讓人不舒服。程序員

> (set '$var 123)
> (context 'Foo)
> $var
=> 123

NewLISP 容許用 @array, %hash, $var 這樣的名稱命名變量,這樣就能夠讓 Perl 風格的代碼能夠存在了。架構

只讀變量

爲防止一些變量被意外修改,程序員老是粗枝大葉的,能夠對一個變量進行保護less

> (constant 'read-ony-var 3.14159)
> (set 'read-only-var 3.14)
ERR: symbol is protected in function set ' read-only-var

使用 context 能夠對一個內置函數進行重寫,這樣就能夠用另一個空間定義一種方言了。函數

但應當有一些符號不能被重寫,if unless cond define let etc .. primitive symbolcode

別名

經過對命名空間的從新賦值,能夠實現一個變量的別名hash

> (set 'Foo:var 12)
> (set 'Doo Foo)
> Doo:var  => 12
> Foo:var  => 12

因爲 context 自己就是一個變量,能夠經過對這個變量的操做,實現對符號表的操做,這是一個強大的功能,但也十分危險。這也是一個優良架構的特徵,自己能夠被修改和擴展。it

context define symbol is global and protected with constant, So rewrite a symbol respresente a context is error.io

一個模塊應當以 (context MAIN) 結束。 一個腳本或程序應當以 (exit) 結束。function

用命名空間來模擬散列的行爲,有個問題,命名空間是全局變量,而散列多是局部的,如何模擬局部的散列呢?變量

模塊的導出和加載,有沒有保護機制呢?限制導出的符號表,限制導入的符號表。這些在優良的架構下,都是能夠實現的。

提早調用的一個函數必須事先聲明

(define Fubar::Fubar)

Newlisp 的命名空間不能嵌套,只是單層的,多層的能夠模擬。這個架構不是問題。

相關文章
相關標籤/搜索