On 6/21/06, Phillip J. Eby <[EMAIL PROTECTED]> wrote: > At 09:55 AM 6/21/2006 -0700, Guido van Rossum wrote: > >BTW a switch in a class should be treated the same as a global switch. > >But what about a switch in a class in a function? > > Okay, now my head hurts. :)
Welcome to the club. There's a Monty Python sketch appropriate... > A switch in a class doesn't need to be treated the same as a global switch, > because locals()!=globals() in that case. But that's not the discerning rule in my mind; the rule is, how to define "at function definition time". > I think the top-level is the only thing that really needs a special case > vs. the general "error if you use a local variable in the expression" rule. To the contrary, at the top level my preferred semantics don't care because they don't use a hash. The strict rules about locals apply when it occurs inside a function, since then we eval the case expressions at function definition time, when the locals are undefined. This would normally be good enough, but I worry (a bit) about this case: y = 12 def foo(x, y): switch x: case y: print "something" which to the untrained observer (I care about untrained readers much more than about untrained writers!) looks like it would print something if x equals y, the argument, while in fact it prints something if x equals 12. > Actually, it might be simpler just to always reject local variables -- even > at the top-level -- and be done with it. Can't because locals at the top-level are also globals. -- --Guido van Rossum (home page: http://www.python.org/~guido/) _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com