logo       

Re: Sky pie: a "var" keyword: msg#00042

python.python-3000.devel

Subject: Re: Sky pie: a "var" keyword

Neil Toronto wrote:
> Marcin 'Qrczak' Kowalczyk wrote:
>
>> It should be:
>>
>> var x = 0
>> def f():
>> print x
>> x = 3
>>
>> for the global variable, and:
>>
>> var x = 0
>> def f():
>> var x
>> print x
>> x = 3
>>
>> for the local variable.
>>
>> There are a few sane choices for the semantics of 'var':
>>
>> 1. The variable is visible from 'var' to the end of the scope.
>> If 'var' doesn't specify an initial value, accessing the variable
>> before it gets assigned to is an error.
>>
>> 2. The variable is visible from 'var' to the end of the scope.
>> If 'var' doesn't specify an initial value, 'None' is used.
>>
>> 3. The variable is visible from the beginning to the end of the scope.
>> Accessing the variable before the 'var' is executed is an error.
>> If 'var' doesn't specify an initial value, 'None' is used.
>>
>>
>
> For the record, though I didn't present it this way in my initial
> proposal, I like #1 and #2 better than #3. Otherwise, you'd get this
> silliness:
>
> def f():
> x = 3 # fine, because the magic 'var' down below creates it
> var x = 0
>
>

On the other hand...

var x = 0
def f():
if sometest:
var x = 3

x = 2

which is seriously evil, because it's not clear which 'x' the last
assignment refers to. Maybe merely seeing "var" in a scope makes it a
local, but using it before the "var" is an error.

The other option is making nested blocks have their own scope, but I
don't think Python wants to go there.

Neil



<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise