Chicken Scheme:模块程序只使用模块内部的程序吗?

时间:2015-02-22 02:00:39

标签: module scheme chicken-scheme

假设我有以下两个模块:

(module mod1 (func2)
  (define (func1) ...)
  (define (func2) ... (func1) ...))

(module mod2 ()
  (import (only mod1 func2))
  (define (func1) ...)
  (define (func3) ... (func2) ...))

func2中对func3的调用是否使用mod2版本的func1mod1版本?

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是以某种方式将func1传递给func2。无论是作为参数,还是通过mod1导出的SRFI-39参数:

(module mod1 (func2)
  (define (func1) ...)
  (define the-func (make-parameter func1)) ; defaults to our version
  (define (func2) ... (let ((func1 (the-func)) (func1)) ...))

(module mod2 ()
  (import (only mod1 func2))
  (define (func1) ...)
  (define (func3) ... (parameterize ((the-func func1)) (func2)) ...))