我有一個像這樣開頭的幾個文件:使用庫作爲#lang?
#lang racket/base
(require "my-library.rkt")
我會很高興,如果我能開始與我的文件:
#lang my-library
是否可以使用圖書館作爲#lang
?我需要對my-library.rkt
進行哪些更改?
我有一個像這樣開頭的幾個文件:使用庫作爲#lang?
#lang racket/base
(require "my-library.rkt")
我會很高興,如果我能開始與我的文件:
#lang my-library
是否可以使用圖書館作爲#lang
?我需要對my-library.rkt
進行哪些更改?
首先,創建my-library/lang/reader.rkt
有以下幾點:
#lang s-exp syntax/module-reader
my-library
然後,添加以下my-library.rkt
:
(provide (all-from-out racket/base))
您可以如何使用它的詳細信息瞭解syntax/module-reader
。
我想補充Chris的答案。您還可以設置#lang
,這樣它就像一個內置的一個:
#lang my-library
要做到這一點,你需要建立一個包。獲得包裝的最簡單方法是使用raco pkg new
。
式中:
raco pkg new my-library
,代之以庫中的模板。
然後,在你的包的根,添加一個名爲文件夾和文件:lang/reader.rkt
而在此文件中寫:
#lang s-exp syntax/module-reader
my-library
現在,安裝軟件包(從您的文件夾的根目錄,運行raco pkg install
,你現在應該可以使用你的語言,就好像它是內置於球拍
正如克里斯說,你可能想確保你添加到庫中。
(provide (all-from-out racket/base))
確保您的新語言具有racket/base
綁定。雖然如果你不想在那裏綁定racket/base
,那麼你可以將它們排除在外。
最後,您可以將新的花哨語言上傳到包服務器以便其他人可以下載它。這裏是documentation for it,但我建議你只要將它上傳到github,並複製其他軟件包所做的工作。
這是一個不好的答案:它設法最大限度地發揮應該很簡單的事情所需的麻煩。這就是爲什麼格雷格的答案應該是正確的解決方案,那麼克里斯的答案應該添加讀者的一部分(但簡化爲使用子模塊),最後應該有一個解決方案,以符號形式命名語言---但即使如此,不需要包裝,使用'link'或類似的東西可能更容易。在完成所有這些工作後,可以提及軟件包... –
如果你的圖書館不打算做任何「lang like」的事情,而你只是想消除require
?你可以:
變化my-library.rkt
克里斯介紹:添加(provide (all-from-out racket/base))
。但不要打擾創建任何my-library/lang/reader.rkt
文件。
使用它:#lang s-exp "my-library.rkt"
。注意s-exp
,所以從技術上講,這並不能完全回答你的問題。:)
請記住,您可以在my-library.rkt
現在它被用作郎而不是被require
d陰影綁定。
注意:如果這比定義一個單獨的lang目錄容易,那麼也可以爲reader模塊使用子模塊(http://blog.racket-lang.org/2012/06/submodules.html) 。 –