Hello John,
John E. Davis schrieb am Fri 07. Oct, 11:48 (-0400):
> I am not convinced that it is a problem. For example, try removing
> the implements line from test1.sl. You will find it works:
>
> $ slsh /tmp/test.sl
> _test
> bar
But this leads to very strange errors:
#v+
$ cat /tmp/test.sl
autoload("foo", "/tmp/test1.sl");
autoload("_test->bar", "/tmp/test1.sl");
define bar()
{
message("bar not in test1.sl");
}
bar();
foo();
bar();
_test->bar();
message("");
foreach (_get_namespaces())
{
loop ( _apropos( (), "bar", 0xF) ) {
"->"; exch();
() + () + ();
message( () );
}
}
$ cat /tmp/test1.sl
% try whether reevaluation works in SLANG 2
% implements("_test");
message(current_namespace());
public define foo()
{
message("foo");
}
define bar()
{
message("bar");
}
$ slsh /tmp/test.sl
bar not in test1.sl
foo
bar
_test
bar
_test->bar
Global->bar
#v-
Global->bar from test.sl gets overwritten because no namespace is given
to the autoload() for foo. So you can't refer to the public functions in
a unit with autoload(), otherwise other functions in the Global namespace
may become overwritten.
Regards, Jörg.
--
Perfection is reached, not when there is no longer anything that can be
added, but when there is no longer anything to take away.
(Antoine de Saint-Exupery)
Attachment:
pgpT9nZ7HZZpg.pgp
Description: PGP signature