0

假设我有以下两个模块:

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

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

调用func2in func3usemod2的版本func1还是mod1的版本?

4

1 回答 1

1

做到这一点的最好方法是以某种方式传递func1func2。作为参数,或通过 SRFI-39 参数mod1导出:

(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)) ...))
于 2015-04-22T09:01:27.973 回答