digitalmars.D.bugs - [Issue 8304] New: writeln of empty Nullables too
- d-bugmail puremagic.com (41/41) Jun 26 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8304
- d-bugmail puremagic.com (24/24) Mar 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=8304
- d-bugmail puremagic.com (16/16) Mar 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=8304
- d-bugmail puremagic.com (29/38) Mar 19 2013 http://d.puremagic.com/issues/show_bug.cgi?id=8304
http://d.puremagic.com/issues/show_bug.cgi?id=8304 Summary: writeln of empty Nullables too Product: D Version: D2 Platform: All OS/Version: All Status: NEW Keywords: rejects-valid Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc In D you can't print an empty Nullable: import std.stdio: writeln; import std.typecons: Nullable; void main() { Nullable!int ni; writeln(ni); } DMD 2.060alpha: object.Exception C:\dmd2\src\phobos\std\typecons.d(1218): Enforcement failed But I'd like something similar to Haskell, where you are allowed to print an empty Nullable (named Maybe): ...>ghci GHCi, version 7.0.2: ... Prelude> import Data.Maybe Prelude Data.Maybe> Nothing :: Maybe Int Nothing In D when the Nullable is empty I'd like writeln to print something like "EmptyNullable". As temporarily workaround I've added this method to Nullable, but it's not a good general solution: string toString() const { return this.isNull ? "EmptyNullable": text(get()); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 26 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8304 In DMD 2.063alpha if you print a const null Nullable: import std.stdio: writeln; import std.typecons: Nullable; void main() { auto a = Nullable!int(10); writeln(a); auto b = const(Nullable!int)(10); writeln(b); const(Nullable!int) c; writeln(c); Nullable!int d; writeln(d); } You get: 10 const(Nullable!(int))(10, false) const(Nullable!(int))(0, true) ==> core.exception.AssertError C:\dmd2\src\phobos\std\typecons.d(1212): Called `get' on null Nullable!int. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=8304 Andrej Mitrovic <andrej.mitrovich gmail.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |andrej.mitrovich gmail.com 19:53:36 PDT --- This could work: string toString() const { return this.isNull ? format("Nullable!%s is null", T.stringof) : text(get()); } How sophisticated does this have to be anyway? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 19 2013
http://d.puremagic.com/issues/show_bug.cgi?id=8304How sophisticated does this have to be anyway?Sorry, I don't remember why I have written "but it's not a good general solution:" :-)This could work: string toString() const { return this.isNull ? format("Nullable!%s is null", T.stringof) : text(get()); }But I have two notes and half: 1) Maybe using a sink in toString is a bit more efficient. 2) Think about printing an array of nullables, do you like this? [Nullable!int is null, 55, Nullable!int is null, 22] This looks a bit better: [Nullable!int(), 55, Nullable!int(), 22] 2b) But what's even better is something similar to Python, that uses __str__ and __repr__ if you print an item or if you print a collection of items. So if you print a single Nullable you get: 55 or: Nullable!int() If you print an array/range of nullables you get: [Nothing, 55, Nothing, 22] D already does that in some cases: writeln("hello"); writeln(["hello"]); It outputs: hello ["hello"] In the first case it doesn't show the "". -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 19 2013