>> > IMO, it should not raise an error, at maximum it should just warn that > global name are shadowed by nested scope. It should compile. > >> | b c | >> b := [ :Object | Object ]. >> c := b value: Object. >> >> is something that I would rather not have compile. Perhaps it should, just >> as one is free to evaluate >> >> Object := 'this is really a bad idea to evaluate'. >> >> but the latter is at least akin to shooting one's foot with a clearly-marked >> weapon. Using Object as a temp name is not something that I can ever see as >> a good idea, but assignments to globals have uses. >> > > The point is, that its not important what name you are using. It is > about a strictness of compiler, and about whether we need > to check for any identifier declared in local scope (such as class > scope, method scope, block scope) clashing with any names defined in > outer scope. > My point that shadowing should be allowed. And we have a Lint there > for pointing out on such clashes. > > It is pointless to enforce strictness, because it works only in one > way: when an outer scope name defined before inner scoped name. > But what if you wrote a method which using some name(s), it compiled > well, and works. But then later you loaded some external package, > which defines a global var with same name. Should your method stop > compiling? I don't think so.
+1
