On Thursday, 12 September 2013 at 19:41:49 UTC, bearophile wrote:
Daniel Davidson:
I am using Dart for code generation but would like to consider
D if I can find a convenient replacement for the following
declarative style:
Replacing Dart with D seems quite strange, such two languages
have so much different usage niches.
var dateRange = struct('date_range')
..doc = 'Basic pair of start and end dates'
..unitTest = true
..publicSection = true
..members = [
member('start_date')
..type = 'Date',
member('end_date')
..type = 'Date',
];
A similar syntax is not allowed in D, but there are two things
that help for this: the C-style initialization of structs, that
support field names too, and the with(){} statement.
Bye,
bearophile
The problem with with is the name can not hide each other, so it
is easy to get into trouble. With C-style initialization I don't
think you can use as expression - I think you need an lvalue for
each and this hurts nesting.
I have a style I'm playing with and if anyone has comments or
improvements (i.e. make more succinct/readable) it would be
appreciated.
Here is a sample and the source for this and comparable Dart are
in the links.
auto d = make((ref Dossier _) {
_.family = [
"father" : make((ref Person _) {
_.birthDate = "2001/1/1";
_.deathDate = "2101/1/1";
_.retirementDate = "2100/1/1"; }),
"mother" : make((ref Person _) {
_.birthDate = "2005/1/1";
_.deathDate = "2125/1/1";
_.retirementDate = "2100/1/1"; }),
];
_.assets = [
"house" : make((ref Asset _) {
_.name = "Home on the Hill";
_.unitValue = 120_000; }),
"car" : make((ref Asset _) {
_.name = "Dodge Dart";
_.unitValue = 500; })
];
});
http://pastebin.com/iLVL20Bz
http://pastebin.com/mLcWDACm
Thanks
Dan