Куриная схема: процедуры модуля используют только внутренние процедуры модуля?

Предположим, у меня есть следующие два модуля:

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

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

Использует ли вызов func2 в func3 версию func1 для mod2 или версию для mod1?


person Haitham Gad    schedule 22.02.2015    source источник
comment
Почему бы просто не попробовать и посмотреть, что получится?   -  person Alexis King    schedule 22.02.2015
comment
Я только что сделал. Он запускает версию mod1. Есть ли способ запустить версию mod2?   -  person Haitham Gad    schedule 22.02.2015


Ответы (1)


Лучший способ сделать это — каким-то образом передать func1 в func2. Либо в качестве аргумента, либо через параметр 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)) ...))
person sjamaan    schedule 22.04.2015