On Wednesday, 9 March 2016 at 12:55:16 UTC, Idan Arye wrote:
[...]
An other point on my wish list would be to allow string symbol
notation
like in ruby. Than using hashes (AA) for parameters gets more
convenient:
:symbol <= just short for => "symbol"
h[:y]= 50; h[:x] = 100; // <=> h["y"] = 50; h["x"] = 100
String symbols are Ruby's(and many Lisps', and maybe some
other, less popular languages) way to do untyped enums and
untyped structs. It's a dynamically typed languages thing and
has no room in statically typed languages like D. D mimics
dynamic typing to some extent by creating types on the fly with
it's powerful templates mechanism - but a new type still needs
to be created. D is geared toward reflection on types at
compile time, not towards type detection at run-time...
Thats true.
Allowing something like `auto params = [:y : 50, :x : 100]`
won't really solve anything. It works nicely in Ruby, because
Ruby has dynamic typing and with some syntactic sugar you get
elegant syntax for dynamic structs. But in a structured
language like D, you run into the problem that `[:y : 50, :x :
100] is an associative array with a determined type for it's
values, so you can't do things like `[:y : 50, :x : "hello"]` -
which greatly limits the usability of this syntax.
Yes.Ok.
What I like about the :symbol notation is, that a string witch is
used
only to distinguish between different objects in an Hash / AA has
a complete different
purpose than a string used to be displayed for the user.
I think that
writeln("Name", a[:name]); is easier to read, than
writeln("Name", a["name"]);
especially if the structures are getting bigger, or you are in a
vibe.d jade template string where you would have to use
additional quoting to write:
a(href="a[\"url\"]") a["link_text"]
a(href="a[:url]") a[:link_text]
May be I should get rid of this by using a struct for my mysql
results to display?
(=> a.url and a.link_text )
Just my 2 Cents :-)