www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Very simple null reference escape

reply Amex <Amex gmail.com> writes:
A.B

If A is null, crash.

A?.B : writeln("HAHA");

No crash, ignored, equivalent to

if (A is null) writeln("HAHA"); else A.B;
Jun 02 2019
next sibling parent reply Paul Backus <snarwin gmail.com> writes:
On Sunday, 2 June 2019 at 07:55:27 UTC, Amex wrote:
 A.B

 If A is null, crash.

 A?.B : writeln("HAHA");

 No crash, ignored, equivalent to

 if (A is null) writeln("HAHA"); else A.B;
The "optional" package on dub [1] has a .dispatch method that does this: auto d = some(A()); // Dispatch to one of its methods d.dispatch.f(); // calls a.f, returns some(4) d.dispatch.inner.g(); // calls a.inner.g, returns some(7) // Use on a pointer or reference type as well A* e = null; // If there's no value in the reference type, dispatching // works, and produces an optional assert(e.dispatch.f() == none); assert(e.dispatch.inner.g() == none); Full example: https://run.dlang.io/is/SmsGQu [1] https://code.dlang.org/packages/optional
Jun 02 2019
parent Amex <Amex gmail.com> writes:
On Sunday, 2 June 2019 at 14:37:48 UTC, Paul Backus wrote:
 On Sunday, 2 June 2019 at 07:55:27 UTC, Amex wrote:
 A.B

 If A is null, crash.

 A?.B : writeln("HAHA");

 No crash, ignored, equivalent to

 if (A is null) writeln("HAHA"); else A.B;
The "optional" package on dub [1] has a .dispatch method that does this: auto d = some(A()); // Dispatch to one of its methods d.dispatch.f(); // calls a.f, returns some(4) d.dispatch.inner.g(); // calls a.inner.g, returns some(7) // Use on a pointer or reference type as well A* e = null; // If there's no value in the reference type, dispatching // works, and produces an optional assert(e.dispatch.f() == none); assert(e.dispatch.inner.g() == none); Full example: https://run.dlang.io/is/SmsGQu [1] https://code.dlang.org/packages/optional
thanks.
Jun 02 2019
prev sibling parent Basile B. <b2.temp gmx.com> writes:
On Sunday, 2 June 2019 at 07:55:27 UTC, Amex wrote:
 A.B

 If A is null, crash.

 A?.B : writeln("HAHA");

 No crash, ignored, equivalent to

 if (A is null) writeln("HAHA"); else A.B;
safeAccess from iz does this : https://github.com/Basile-z/iz/blob/master/import/iz/sugar.d#L1666
Jun 02 2019