On 07/08/2010 11:01 AM, Shin Fujishiro wrote:
Michel Fortin<[email protected]> wrote:
Le 2010-07-08 à 8:13, Andrei Alexandrescu a écrit :
This is solid work! There's an opportunity here - it overlaps a LOT
with std.variant.Algebraic.
Indeed. It's great. But why is the protection level set to 'package'?
Isn't it meant to be used outside of Phobos?
I needed it to implement native codeset support in stdio. I just went
conservative for adding a public stuff that people might not use...
Cool, looking forward to seeing the result. For all I know Ruby was very
successful in Japan because it had support for the Japanese character
sets from day one.
One thing I've missed about Algebraic is the ability to switch on the
type, somewhat like this:
Algebraic!(A, B, C) x;
switch (x.type) {
case x.typecode!A:
case x.typecode!B:
case x.typecode!C:
...
}
Seems like this would be easy by switching on Any's _duckID, but this
facility isn't exposed (it's all private).
It's nice. I'll add it!
switch (x.Algebraic.type) {
case x.Algebraic.typeCode!A:
case x.Algebraic.typeCode!B:
...
default:
}
I don't think that's very useful because you need to follow each case
with a peek() or something. I was thinking it would be great to define a
dispatcher a la Sean's receive():
x.Algebraic.dispatch(
(A obj) { writeln("saw an A"); },
(B obj) { writeln("saw a B"); },
...
);
Such a dispatch function could come in two flavors: strict and non-strict.
Andrei
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos