www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Changing by ref a class passed in function

reply "Zaher Dirkey" <zaherdirkey yahoo.com> writes:
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.
Jan 22 2015
parent reply "anonymous" <anonymous example.com> writes:
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. */
Jan 22 2015
parent reply "anonymous" <anonymous example.com> writes:
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);
Jan 22 2015
parent "Zaher Dirkey" <zaherdirkey yahoo.com> writes:
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.
Jan 22 2015