On Thursday, 6 December 2012 at 00:31:53 UTC, Jonathan M Davis
wrote:
Pretty much the only kind of situation that I remember running
into where I
would consider Variant to be a good solution is one where you
literally have
to return a type from a function where you can't know that type
at compile
time, and there is no common type to use. And the only time
that I recall
running into that recently was in writing a lexer (the values
of literals
ended up having to be put in a variant type). There are
obviously other use
cases besides that (database-related stuff and spreadsheets
like you mentioned
are other possibilities), but they are extremely rare in my
experience. In
almost all cases, you can and should know the type at compile
time, in which
case, using Variant makes no sense.
- Jonathan M Davis
My experience with Variant has come from integration in LuaD
(Probably like what I'd want from JSON).
My main use has been an Algebraic type of string, string[], and
string[][string]. (Lua does not have arrays or dictionaries, it
has a table).
In general when I request data I know which of these it is,
however I do have some generic code to operate on any of these
types, thus:
if(myVar.peek!(string[][string]))
... myVar.get!(string[][string])
Does get repetitive and messy to read.
On another note, it is sad I can't have that defined as
MyType[MyType].