Thanks, Isaiah. Can you please add more details about closing Julia modules? Is it like finalizing them so that no more details can be added to it later? If so, what is rationale behind it?
On Sunday, September 7, 2014 6:14:55 AM UTC+3, Isaiah wrote: > > I believe this is not currently exposed, although it may be worth pointing > out that any internal variable from an imported module is readable with > `MyModule.foo`. Julia modules are closed after declaration, although you > can sort of cheat by calling `MyModule.eval(::Expr) -- the downside being > that the call will be interpreted. > > You could do a limited (read-only) form of this in a macro by basically > checking all names in a macro against the current scope and then prepending > `MyModule.X` if it is not found. I've wanted this occasionally, because it > would make copy-pasting code from a module somewhat easier, for debugging > purposes. > > > On Fri, Sep 5, 2014 at 4:58 PM, Andrei <[email protected] <javascript:> > > wrote: > >> In module.c in Julia sources I see "jl_set_current_module()" function. Is >> it somehow exposed to Julia API? >> >> To give you some context, in Common Lisp (as well as some other dialects) >> there are 2 separate macros for dealing with packages (analogue of modules >> in Julia): >> >> defpackage - defines new package and switches to it >> in-package - simply switches to specified package >> >> One great feature that these macros bring is ability to easily switch >> context of execution. E.g. in REPL (code simplified): >> >> ;; initially working from cl-user package >> cl-user> (defpackage foo (:use :common-lisp)) ;; automatically switched >> to new package >> foo> (defvar x 1) >> X >> foo> x >> 1 >> foo> (in-package :cl-user) >> foo> x >> ;; error: x not defined in :cl-user >> >> This is extremely helpful for both - package extension and >> debugging/interactive development. E.g. we can switch to a module in >> question and get all internal variables visible, play around in that >> context and go back to main package without stopping REPL. >> >> So I'm wondering if something like this is possible in Julia at all. >> > >
