[plt-scheme] Using eval in modules
On Jun 23, 2007, at 9:31 AM, Jean-Pierre Lozi wrote:
> This works because you are calling (eval-string-with-1 "abc") from
> outside the module - but it doesn't when the function is called
> from the inside the module. For instance :
>
> (module foo mzscheme
> (define (abc x)
> (display "foo")
> (newline))
>
> (define (eval-string-with-1 string)
> ((eval (string->symbol string)) 1))
>
>
> (eval-string-with-1 "abc")
>
> (provide eval-string-with-1
> abc))
>
> (require foo)
>
> Doesn't work. And that's what I need to do :/
Modules are designed to be separately compiled, and generally (as I
understand it) to discourage the kind of dynamic interaction allowed
by "eval." For instance, the presence of eval in a module in the way
you describe would make it impossible for a compiler to conclude that
a module binding is never mutated. If you allow uses of eval to
modify syntactic bindings, things get even weirder. Would it be
presumptuous to ask what the intended application is, and whether
there's another way to accomplish it?
John Clements
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2223 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20070623/457b7124/attachment.p7s>