This is the mail archive of the guile@cygnus.com mailing list for the guile project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Jost Boekemeier writes: > Could you please explain the semantics of re-exporting and renaming > of symbols? Sure. Exporting a symbol makes its variable binding available in a module's public interface, where another module can do `use-modules' or `:use-module' to get to them. For example, the sequence: (define-module (A)) (define-public pi 3.1415) (define-module (C) :use-module (A)) (define-module (D) :use-module (C)) makes `pi' available for use by module C, but not module D. In order for D to see `pi', C would need to re-export `pi', ie, add `pi' to its public interface. (Currently, you can do this using `export', or `define-public'.) Renaming is simply defining a new symbol to bind to the variable of another one. (Currently, you can do this using `define'.) Suppose D wants `pi' defined as 3.14, but still wants access to A's `pi', which it considers `exact-pi'. Then, the sequence: (define-module (A)) (define-public pi 3.1415) (define-module (C) :use-module (A)) (define-public exact-pi pi) (define-module (D) :use-module (C)) (define pi 3.14) would be a case of both re-export as well as renaming, and D would be able to use `pi' as well as `exact-pi'. Hmmm, one doesn't need weird syntactic cruft like `reexport-from-module' at all. (I rescind my desire to see it added to guile, having learned something by doing this explanation -- thanks!) Feeling goofy, :-D thi