digitalmars.D.learn - Simplifying a string mixin
- Victor Porton (15/15) Feb 25 2019 Can string mixing be split into several parts?
- Adam D. Ruppe (13/25) Feb 25 2019 I'd probably write that as:
- Simen =?UTF-8?B?S2rDpnLDpXM=?= (16/21) Feb 26 2019 Agreed. There are times when error message can be significantly
- bauss (13/41) Feb 26 2019 Or you could do:
- Jacob Carlborg (11/30) Feb 26 2019 You can create multiple functions that returns a portion of the string
Can string mixing be split into several parts? I have a mixin like this: mixin("struct " ~ name ~ " {\n" ~ " struct Regular {\n" ~ " // ..." ~ " }\n" ~ " struct WithDefaults {\n" ~ " // ..." ~ " }\n" ~ '}'); I would like to split it into several mixins (preferably using regular non-string mixins). Are things like this possible? Also, what is the most proper thing to check that `name` is a
Feb 25 2019
On Monday, 25 February 2019 at 20:57:37 UTC, Victor Porton wrote:Can string mixing be split into several parts? I have a mixin like this: mixin("struct " ~ name ~ " {\n" ~ " struct Regular {\n" ~ " // ..." ~ " }\n" ~ " struct WithDefaults {\n" ~ " // ..." ~ " }\n" ~ '}');I'd probably write that as: mixin(q{ struct } ~ name ~ q{ { struct Regular { // stuff } struct With Defaults { // ... } } });Also, what is the most proper thing to check that `name` is ajust let the compiler do it imo.
Feb 25 2019
On Monday, 25 February 2019 at 21:04:48 UTC, Adam D. Ruppe wrote:On Monday, 25 February 2019 at 20:57:37 UTC, Victor Porton wrote:Agreed. There are times when error message can be significantly more readable though, if testing for valid names is done in intelligent places. In this case, something like this can be of use: enum isValidName(string s) = __traits(compiles, { mixin("int "~s~";"); }); unittest { static assert(isValidName!"a"); static assert(isValidName!"a_B"); static assert(!isValidName!"6a"); static assert(!isValidName!""); static assert(!isValidName!"!"); } -- SimenAlso, what is the most proper thing to check that `name` is ajust let the compiler do it imo.
Feb 26 2019
On Monday, 25 February 2019 at 21:04:48 UTC, Adam D. Ruppe wrote:On Monday, 25 February 2019 at 20:57:37 UTC, Victor Porton wrote:Or you could do: mixin(format(q{ struct %s { struct Regular { // stuff } struct With Defaults { // ... } } }, name)); That way it's way more readable.Can string mixing be split into several parts? I have a mixin like this: mixin("struct " ~ name ~ " {\n" ~ " struct Regular {\n" ~ " // ..." ~ " }\n" ~ " struct WithDefaults {\n" ~ " // ..." ~ " }\n" ~ '}');I'd probably write that as: mixin(q{ struct } ~ name ~ q{ { struct Regular { // stuff } struct With Defaults { // ... } } });Also, what is the most proper thing to check that `name` is ajust let the compiler do it imo.
Feb 26 2019
On 2019-02-25 21:57, Victor Porton wrote:Can string mixing be split into several parts? I have a mixin like this: mixin("struct " ~ name ~ " {\n" ~ " struct Regular {\n" ~ " // ..." ~ " }\n" ~ " struct WithDefaults {\n" ~ " // ..." ~ " }\n" ~ '}'); I would like to split it into several mixins (preferably using regular non-string mixins). Are things like this possible?You can create multiple functions that returns a portion of the string to mixin. For example: mixin(generateCode(name)); string generateCode(string name) { return part1(name) ~ part2() ~ part3(); // and so on }Also, what is the most proper thing to check that `name` is a properHave one of the above functions to do the validation. -- /Jacob Carlborg
Feb 26 2019