diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2014-04-09 00:06:38 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2014-04-09 00:06:38 +0200 |
commit | 36869b3aed66b7edd8c116929eb418bb9d6f4554 (patch) | |
tree | 62c215d24671625889118e04b19d68d79e6d0795 | |
parent | bb8b9da3919447824472913561b2e127cccf16d1 (diff) | |
parent | 71b69a627f0558bd2286df54caeab267d2ddeb5f (diff) | |
download | Nim-36869b3aed66b7edd8c116929eb418bb9d6f4554.tar.gz |
Merge pull request #901 from reactormonk/seq_toString
Added `$` for seq
-rw-r--r-- | lib/system.nim | 41 | ||||
-rw-r--r-- | tests/system/toString.nim | 11 |
2 files changed, 34 insertions, 18 deletions
diff --git a/lib/system.nim b/lib/system.nim index 047b998c3..a54a25f2f 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -1697,12 +1697,23 @@ proc `$`*[T: tuple|object](x: T): string = ## $(23, 45) == "(23, 45)" ## $() == "()" result = "(" + var firstElement = true for name, value in fieldPairs(x): - if result.len > 1: result.add(", ") + if not(firstElement): result.add(", ") result.add(name) result.add(": ") result.add($value) + firstElement = false result.add(")") + +proc collectionToString[T](x: T, b, e: string): string = + result = b + var firstElement = true + for value in items(x): + if not(firstElement): result.add(", ") + result.add($value) + firstElement = false + result.add(e) proc `$`*[T: set](x: T): string = ## generic ``$`` operator for sets that is lifted from the components @@ -1710,24 +1721,18 @@ proc `$`*[T: set](x: T): string = ## ## .. code-block:: nimrod ## ${23, 45} == "{23, 45}" - result = "{" - for value in items(x): - if result.len > 1: result.add(", ") - result.add($value) - result.add("}") + collectionToString(x, "{", "}") -when false: - proc `$`*[T](a: openArray[T]): string = - ## generic ``$`` operator for open arrays that is lifted from the elements - ## of `a`. Example: - ## - ## .. code-block:: nimrod - ## $[23, 45] == "[23, 45]" - result = "[" - for x in items(a): - if result.len > 1: result.add(", ") - result.add($x) - result.add("]") +proc `$`*[T: seq](x: T): string = + ## generic ``$`` operator for seqs that is lifted from the components + ## of `x`. Example: + ## + ## .. code-block:: nimrod + ## $(@[23, 45]) == "@[23, 45]" + collectionToString(x, "@[", "]") + +proc `$`*[T: array](x: T): string = + collectionToString(x, "[", "]") # ----------------- GC interface --------------------------------------------- diff --git a/tests/system/toString.nim b/tests/system/toString.nim new file mode 100644 index 000000000..17dcb3cb4 --- /dev/null +++ b/tests/system/toString.nim @@ -0,0 +1,11 @@ +discard """ + output:'''@[23, 45] +@[, foo, bar] +[, foo, bar] +[23, 45]''' +""" + +echo($(@[23, 45])) +echo($(@["", "foo", "bar"])) +echo($(["", "foo", "bar"])) +echo($([23, 45])) |