April 17, 2008 More on boxer | ||||
---|---|---|---|---|
| ||||
I think I may have found another problem with boxer/writefln: import std.stdio: writefln; import std.boxer: box, Box; import d.func: putr; void main() { auto a = new Box[1]; a[0] = box(a); writefln(a); // Error: Stack Overflow putr(a); // Error: Stack Overflow } (I have to fix my str/repr/put/putr still for such situation). Note that in Python there isn't such bug: >>> a = [1, 2] >>> a[1] = a >>> print a [1, [...]] --------------------------------- I think cmp among arrays or Box is buggy so if you need it you may use something similar to the following (not much tested still): import std.boxer: Box, boxArray; import std.stdio: writefln; int boxArrayCmp(Box[] ba1, Box[] ba2) { if (ba1.length < ba2.length) { foreach (i, field; ba1) { if (field < ba2[i]) return -1; else if (field > ba2[i]) return 1; } return -1; } else { foreach (i, field; ba2) { if (field < ba1[i]) return 1; else if (field > ba1[i]) return -1; } if (ba1.length == ba2.length) return 0; else return 1; } } void main() { auto b1 = boxArray(10, 20, 15.5); auto b2 = boxArray(10, 20, 15.6); auto b3 = boxArray(10, 20.0, 15.5); auto b4 = boxArray(10, 20.0); writefln(boxArrayCmp(b1, b2), " ", b1 < b2); // -1 false writefln(boxArrayCmp(b2, b1), " ", b2 > b1); // 1 false writefln(boxArrayCmp(b1, b3), " ", b1 == b3); // 0 false writefln(boxArrayCmp(b1, b4), " ", b1 > b4); // 1 true } Bye, bearophile |
Copyright © 1999-2021 by the D Language Foundation