Assigning a scope variable to an outer-scope variable is allowed?

"のしいか (noshiika)" noshiika at gmail.com
Sat Jul 7 21:04:49 PDT 2007


Gregor Richards wrote:
>> const(int[]) g;
>> void foo(in int[] a) { // in == final const scope
>>     g = a;  // a is scope?
>> }
> 
> Assigning a scope object to a variable which is not in that scope is 
> valid, it's just usually stupid. One use where it's necessary (though a 
> bit unclean) is if you have a global variable which you want to 
> temporarily set to a scope object. You set it at the beginning of your 
> scope, then reset it at the end, so it's never referring to an invalid 
> object.
> 
> That is to say: You're right, that's not allowed. But it's not allowed 
> due to it being impossible at /runtime/, not any problems at /compile/ 
> time. And adding a warning would make legit uses a PITA.
> 

Well, then isn't it inconsistent with what Walter said before?


news://news.digitalmars.com:119/f2iism$tco$1@digitalmars.com
Walter Bright wrote:
 > scope - the function will not keep a reference to the parameter's data
 > that will persist beyond the scope of the function
 >
 > For example:
 > int[] g;
 >
 > void foo(in int[] a)
 > {
 >     a = [1,2];    // error, a is final
 >     a[1] = 2;   // error, a is const
 >     g = a;    // error, a is scope
 > }



More information about the Digitalmars-d mailing list