On Monday, 30 September 2013 at 04:20:32 UTC, Ali Çehreli wrote:
I don't know a Phobos function either but the following should work:

import std.stdio;
import std.traits;

void pp(T)(File output, T value)
{
    static if (isSomeString!T) {
        output.writef(`"%s"`, value);

    } else {
        output.write(value);
    }
}

void pp(T)(T value)
{
    pp(stdout, value);
}

void main()
{
    pp("hello");
    pp(42);
}

Ali

OK.

But putting quotes around a string value is obviously not enough.
What if the string contains a quote? "hell\"o" would become `"hell"o"`!

Seems, I have the choice between:

string repr(T)(T value)
{
    auto writer = appender!string();
    auto fmt = FormatSpec!char("%s");

    formatElement(writer, value, fmt);
    return writer.data;
}

(relying on the "undocumented" formatElement),
or the aforementioned array detour:

string repr(T)(T value)
{
    return "%(%s%)".format([value]);
}

Reply via email to