[plt-scheme] eval-string namespace
When you provide bar, the `require' is putting bar into the toplevel
namespace. Also, when you call eval-string, that code will refer to the
toplevel namespace. If you don't provide bar, then it won't be in the
toplevel namespace, so the eval-string won't find it.
The point here is that `eval-string' is not lexically sensitive in any
way. It always compiles free identifiers in the input expression to
refer to the toplevel -- not the place where the eval-string was
called.
Robby
At 29 Jul 2003 22:15:29 +0000, Paulo Jorge de Oliveira Cantante de Matos wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> Hi all,
>
> Check the following:
> (module test mzscheme
>
> (require (lib "string.ss"))
>
> (define (foo)
> (eval-string (read-line)))
>
> (define (bar)
> (display "Done"))
>
> (provide foo))
>
> If I run this, require test.scm and enter bar for read-line I get that
> bar is undefined. But it'll work alright if I provide bar. Why?
> I don't understand this behaviour, it's definitely not what I expected.
> In the manual there is no mention to this situation, which is I might
> say strange and boring since I have in the module 20 functions that can
> be called through eval-string that I don't want to provide.
>
> Any suggestions?
>
> Best regards,
>
> Paulo J. Matos
>
>