On Monday, 24 February 2014 at 17:47:55 UTC, 1100110 wrote:
On 2/24/14, 11:06, Gary Willoughby wrote:
On Monday, 24 February 2014 at 11:53:00 UTC, anonymous wrote:
On Monday, 24 February 2014 at 11:47:02 UTC, Namespace wrote:
On Monday, 24 February 2014 at 11:41:41 UTC, Gary Willoughby wrote:
I keep seeing this syntax used a bit and i'm stumped to what it
means. What is it?

enum foo = q{
// ???
};

http://dlang.org/lex.html#DelimitedString

It's a token string though, not a delimited string. See the
section "Token Strings" on that page.

What are they used for? Simpler for creating code at compile time?

It allows IDE syntax highlighting and code completion to work with strings that are going to be mixed in.

You don't have to use it, in fact there's no difference between this and a normal string.

It's just nicer.

Well... it's more than just "looking" nicer: there *are* some differences:

For starters, a token string has no "terminating" character: You won't have to chose between " or `: It'll simply end with the "last" }. This means that if your mixin-string contains some strings itself, which itself contains quotes, you should have no problems with it. EG:
auto code = q{
    foreach(i; 0 .. 10)
    {
        writefln(`"hello" %s`, i);
    }
};

Notice how there is nothing special denoting the last "}" as "end of string": It's *just* the end of string because it is the closing brace. The only times I've had "issues" is if you plan to use the "qstring" inside a format (*awesome* for generating code), and the generated code itself contains a formatted write, in which case, you'll need to escape the % =>

auto code = q{
    foreach(i; 0 .. %s)
    {
        writefln("hello: %%s", i);
    }
};
mixin(format(code, 10));

Also, a "qstring" can only contain valid D tokens ("token string"). If your mixin string does not adhere some the base D syntaxic rules, you'll get a compilation error. In particular, you'll need balanced bracing/parenthesising, and correctly formed tokens.

Reply via email to