Thread overview | ||||||
---|---|---|---|---|---|---|
|
July 04, 2007 Assigning a scope variable to an outer-scope variable is allowed? | ||||
---|---|---|---|---|
| ||||
Hello. I have a question about "scope" variables. I've understood that it is not allowed to copy a scope variable or a scope parameter to outside of the scope. But, the following code compiles without any warnings or errors, and of course, causes a runtime error. Is this just a bug? //---- class C { ~this() { writefln("dtor"); } void func() { } } void main() { C a; { scope C b = new C; a = b; } // dtor if(a !is null) a.func(); // Error: Access Violation } const(int[]) g; void foo(in int[] a) { // in == final const scope g = a; // a is scope? } |
July 04, 2007 Re: Assigning a scope variable to an outer-scope variable is allowed? | ||||
---|---|---|---|---|
| ||||
Posted in reply to のしいか (noshiika) | のしいか (noshiika) wrote:
> Hello. I have a question about "scope" variables.
>
> I've understood that it is not allowed to copy a scope variable or a scope parameter to outside of the scope. But, the following code compiles without any warnings or errors, and of course, causes a runtime error.
>
> Is this just a bug?
>
> //----
>
> class C {
> ~this() { writefln("dtor"); }
> void func() { }
> }
> void main() {
> C a;
> { scope C b = new C;
> a = b;
> } // dtor
> if(a !is null) a.func(); // Error: Access Violation
> }
>
> 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.
- Gregor Richards
|
July 08, 2007 Re: Assigning a scope variable to an outer-scope variable is allowed? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Gregor Richards | 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 > } |
July 08, 2007 Re: Assigning a scope variable to an outer-scope variable is allowed? | ||||
---|---|---|---|---|
| ||||
Posted in reply to のしいか (noshiika) | This just isn't implemented yet. ã�®ã�—ã�„ã�‹ (noshiika) Wrote: > Well, then isn't it inconsistent with what Walter said before? |
Copyright © 1999-2021 by the D Language Foundation