Gauche:ImportModifier

Gauche:ImportModifier

Shiro(2009/09/26 19:27:16 PDT): モジュールのインポート時にprefixをつけたい、 という要望はずいぶん前からあって、r6rsコンパチモードでも そういう機能は必要になるんで、いよいよ実装することにする。

仕様

importとuseを拡張。

  <module-spec> : <module-name> | (<module-name> . <modifier-kv-list>)
  <module-name> : <symbol>

<modifier-kv-list>はキーワードと値の交代リストでimport modifierを 指定する。次のmodifierがサポートされる。

:only (<identifier> ...)

インポートしたモジュールから<identifier>...のみが見えるようにする。

:except (<identifier> ...)

インポートしたモジュールのうち、<identifier>...以外を見えるようにする。

:rename ((<identifier-orig> <identifier-new>) ...)

インポートしたモジュール中の<identifier-orig>の束縛を、<identifier-new>の 束縛として見えるようにする。もともとの<identifier-orig>の束縛は見えなくなる。

:prefix <identifier>

インポートした側では、<identifier>をプリペンドした名前が見える。

(use srfi-1 :prefix srfi-1:)

srfi-1:filter => srfi-1 の filterを参照

実装

prefixについては識別子を探す側、つまりScm_FindBindingで対応する。 prefixつきでimportされているモジュールを探しに行くときは、 探すべき識別子からprefixを取り除いてやるだけだ。

only, except, renameについては、import時にダミーのモジュールを作る。

More ...