| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
January 22, 2015 Changing by ref a class passed in function | ||||
|---|---|---|---|---|
| ||||
See example bellow, i want to pass object to function nullIt and want this function to null it.
----
import std.stdio;
static if (!is(typeof(writeln)))
alias writefln writeln;
class MyClass{
}
void nullIt(ref Object o)
{
o = null;
}
void main()
{
auto o = new MyClass();
nullIt(o);
if (o is null)
writeln("It is null");
}
Thanks in advance.
| ||||
January 22, 2015 Re: Changing by ref a class passed in function | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Zaher Dirkey | On Thursday, 22 January 2015 at 13:06:42 UTC, Zaher Dirkey wrote:
> See example bellow, i want to pass object to function nullIt and want this function to null it.
>
> ----
> import std.stdio;
>
> static if (!is(typeof(writeln)))
> alias writefln writeln;
>
>
> class MyClass{
>
> }
>
> void nullIt(ref Object o)
> {
> o = null;
> }
>
> void main()
> {
> auto o = new MyClass();
>
> nullIt(o);
>
> if (o is null)
> writeln("It is null");
> }
>
> Thanks in advance.
o needs to be typed as Object:
Object o = new MyClass();
nullIt(o);
If the compiler accepted your original code, it would be possible to assign a non-MyClass to o:
void messWithIt(ref Object) o) {o = new Object;}
auto o = new MyClass();
messWithIt(o); /* If this compiled, o would be typed as MyClass, but would not actually be a MyClass. */
| |||
January 22, 2015 Re: Changing by ref a class passed in function | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Thursday, 22 January 2015 at 14:29:59 UTC, anonymous wrote:
> o needs to be typed as Object:
>
> Object o = new MyClass();
> nullIt(o);
Alternatively, templatize nullIt:
void nullIt(O)(ref O o) {o = null;}
auto o = new MyClass();
nullIt(o);
| |||
January 22, 2015 Re: Changing by ref a class passed in function | ||||
|---|---|---|---|---|
| ||||
Posted in reply to anonymous | On Thursday, 22 January 2015 at 14:39:45 UTC, anonymous wrote:
> On Thursday, 22 January 2015 at 14:29:59 UTC, anonymous wrote:
>> o needs to be typed as Object:
>>
>> Object o = new MyClass();
>> nullIt(o);
>
> Alternatively, templatize nullIt:
>
> void nullIt(O)(ref O o) {o = null;}
> auto o = new MyClass();
> nullIt(o);
Template way is better here, thank you.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply