Hi everyone, I'm writing code using expressions fairly heavily (mainly as a
learning exercise), and am using lots of constructions like:
function haskey(df::MyDataType, key::Expr)
key.head == :call && return(all([haskey(df, x) for x in key.args[2:end
]]))
key.head == :(=) && return(haskey(df, key.args[2]))
key.head == :block && return(all([haskey(df, x) for x in key.args]))
key.head == :line && return(true)
warn("Didn't expect to get here...")
false
end
Some quick questions:
1) Is there a way of mimicking Expr subtypes that I'm not aware of that
would let me rewrite this as several different methods? Are there better
ways to do this in general?
2) Is there a list anywhere of the different possible values for Expr.head?
(I don't see it in the metaprogramming section of the manual, but may have
missed it.)
3) How much of Julia would it break or slow down to make Expr an abstract
type with the contents of "head" implemented as different subtypes? (This
last one is mostly just asked out of curiosity.)
Thanks!