モジュールによって提供されるすべてのエクスポートを見つけるには、関数module->exports
を使用します。残念ながら、その関数に渡されたモジュールは、現在の名前空間で宣言されてから、その関数を関数に使用できなければなりません。私は、モジュールが静的に何かを知っているとき、これは問題ではありません、私はそれを現在のモジュールに要求してから、その関数を使用します。`module-> exports`で使用するために、現在の名前空間にモジュールを宣言します。
しかし、モジュールが静的にわからず、モジュールパスインデックス(ファイルシステムの有効なモジュールを指しています)に渡されていると、モジュールを現在の名前空間。私はモジュールパス-index->輸出機能を作りたい場合は言う:モジュールを宣言する方法について
(define (module-path-index->exports mpi)
(parameterize ([current-namespace (make-base-namespace)])
<stuff to load module path index into current-namespace>
(if (module-declared? mpi)
(module->exports mpi)
(error "Module not declared"))))
任意の提案ですか?
更新:identifier-binding
機能から来るmodule-path-index
秒で失敗するようだと
私は、ここにnamespace-reaquire
を使用することはできません。たとえば、次のコード:
#lang racket
(define binding (identifier-binding #'contract-continuation-mark-key))
(parameterize ([current-namespace (make-base-namespace)])
(dynamic-require (first binding) (void))
(module->exports (first binding)))
は、このエラーを与える:
Language: racket, with debugging; memory limit: 8192 MB.
. . require: unknown module
module name: #<resolved-module-path:"/Users/leif/racket/racket/collects/racket/contract/private/guts.rkt">