On Thursday, 6 February 2014 at 14:15:47 UTC, bearophile wrote:
Recently Erlang language has added several things:
http://joearms.github.io/2014/02/01/big-changes-to-erlang.html
One interesting change is the syntax to handle associative
arrays (that are meant to be used a little like records):
Updating a map is done as follows:
NewX = X#{ key1 => Val1, ... KeyN := ValN, ...}
X is the old associative array. "=>" adds a mew key, while ":="
updates an already existing key, and if it's not present an
error is generated. So a spelling mistake cannot accidentally
introduce a new key if you want to update some value. This
avoids a common mistake.
I am not suggesting to add a new syntax to D, but perhaps a
simple "AA.update(key, val)" function in the object module can
be useful.
Bye,
bearophile
I'm always for little helper functions, but I don't think
Erlang's idiom of using maps as records is good for D. That model
works well with dynamic typing, where record types are
meaningless and only their structure is important(JavaScript is
fine example). With static typing it's better to declare a type
for the record, so whether the field you are trying to set exists
or not can be checked at compile-time.
Besides, the usefulness of maps-as-records will be quite limited
in D, since associative arrays has a fixed value type. To store
different types in different fields, we'll need to stringly-type
them(very bad!), use pointers abd casting(not that bad but still
bad!) or use Variant - which is better than the first two
solutions but still not as good as simply using structs or
classes.