On Wed, Dec 9, 2015 at 3:05 PM,  <vish...@stanford.edu> wrote:
> Interesting. I didn't think to use dump to check differences.
>
> Another followup question. After using dump on some simple if statements,
> I've noticed that all blocks induce this LineNumberNode which is messing up
> the equality.
> Is there a way to ignore these nodes in the equality check? They show up in
> any kind of block statement (function, if, etc)
>

May I ask what do you need the equality of expressions for? It doesn't
sound like a too useful concept. There can be expressions that are
equal but have different side effects due to the variables they
capture (try constructing `Expr(:call, :push!, [1, 2], 1)` twice and
eval/compare them). There can also be expressions that are equivalant
but appears differently.

In general, I never find `==` of expressions too useful. When
processing it, you can just ignore the line number nodes if you don't
care too much about debug info (also see base/docs/Docs.jl for some
example of stripping unwanted part from a expression). There's also
MacroTools.jl which provides a nice way to process expressions.

> eg:
>
> dump(:(if true 1 else 0 end))
>
> Expr
>
>   head: Symbol if
>
>   args: Array(Any,(3,))
>
>     1: Bool true
>
>     2: Expr
>
>       head: Symbol block
>
>       args: Array(Any,(2,))
>
>         1: LineNumberNode
>
>           file: Symbol none
>
>           line: Int64 1
>
>         2: Int64 1
>
>       typ: Any
>
>     3: Expr
>
>       head: Symbol block
>
>       args: Array(Any,(2,))
>
>         1: LineNumberNode
>
>           file: Symbol none
>
>           line: Int64 1
>
>         2: Int64 0
>
>       typ: Any
>
>   typ: Any
>
>
> dump(Expr(:if, true, Expr(:block, 0), Expr(:block,1)))
>
> Expr
>
>   head: Symbol if
>
>   args: Array(Any,(3,))
>
>     1: Bool true
>
>     2: Expr
>
>       head: Symbol block
>
>       args: Array(Any,(1,))
>
>         1: Int64 0
>
>       typ: Any
>
>     3: Expr
>
>       head: Symbol block
>
>       args: Array(Any,(1,))
>
>         1: Int64 1
>
>       typ: Any
>
>   typ: Any
>
>
> They're the same minus LineNumberNodes, because block type expressions
> always create those things.
>
>
> On Wednesday, December 9, 2015 at 7:21:55 AM UTC-8, STAR0SS wrote:
>>
>> You can also use dump() on your expressions to see how they differ
>> exactly. The normal printing doesn't really show you much.

Reply via email to