I didn't know about `methodswith(???, true)`. Could that be output by default when one is asking for help?
-erik On Wed, Dec 9, 2015 at 5:17 PM, Yichao Yu <[email protected]> wrote: > On Wed, Dec 9, 2015 at 5:15 PM, Yichao Yu <[email protected]> wrote: > > On Wed, Dec 9, 2015 at 5:12 PM, <[email protected]> wrote: > >> sorry ok, I see - it's > >> Expr.head > >> and > >> Expr.args > >> > >> Man, I really wish Julia had something like python's help(Expr) to see > all > >> the methods/fields of a class... > > And for methods, use methodswith > > ``` > julia> methodswith(Expr, true) > 6-element Array{Method,1}: > ==(x::Expr, y::Expr) at expr.jl:45 > copy(e::Expr) at expr.jl:34 > hash(x::Expr, h::UInt64) at hashing.jl:60 > print(io::IO, > ex::Union{Expr,GlobalRef,GotoNode,LabelNode,LineNumberNode,QuoteNode,SymbolNode,TopNode}) > at show.jl:290 > serialize(s::SerializationState{I<:IO}, ex::Expr) at serialize.jl:227 > show(io::IO, > ex::Union{Expr,GlobalRef,GotoNode,LabelNode,LineNumberNode,QuoteNode,SymbolNode,TopNode}) > at show.jl:291 > ``` > > > >> > > > > ``` > > help?> Expr > > search: Expr export nextprod expanduser expm exp2 exp expm1 exp10 > > expand exponent > > > > No documentation found. > > > > Summary: > > > > type Expr <: Any > > > > Fields: > > > > head :: Symbol > > args :: Array{Any,1} > > typ :: Any > > ``` > > > >> > >> On Tuesday, December 8, 2015 at 8:26:35 PM UTC-8, [email protected] > wrote: > >>> > >>> Situations where the printed form of an expression (i.e, what you'd > type > >>> into julia REPL, for example) are equivalent aren't "equal" per julia's > >>> standards: > >>> > >>> Expr(:call, :<, 1, 2) --> :(1 < 2) > >>> Meta.show_sexpr(:(1 < 2)) --> (:comparison, 1, :<, 2) > >>> Expr(:call, :<, 1, 2) == :(1 < 2) --> FALSE > >>> > >>> I figure that's expected because the s-expressions behind the scenes > >>> aren't accurate. > >>> So the workaround is: > >>> > >>> Expr(:call, :<, 1, 2) == :(<(1,2)) --> TRUE > >>> > >>> This isn't ideal, but at least there's a way to express the Expr > object I > >>> want in terms of julia's syntax. > >>> Is there another way to make these two semantically equivalent > >>> representations actually be equal? > >>> > >>> Second - a much weirder problem: > >>> > >>> Meta.show_sexpr(:(symbol.x())) --> (:call, (:., :symbol, (:quote, :x))) > >>> > >>> > >>> Ok, so make an expression: > >>> > >>> Meta.show_sexpr(Expr(:call, Expr(:., :symbol, Expr(:quote, :x)))) --> > >>> (:call, (:., :symbol, (:quote, :x))) > >>> > >>> > >>> Cool. So this time the expression object and the actual julia > >>> representation are the exact same. > >>> > >>> However: > >>> > >>> Expr(:call, Expr(:., :symbol, Expr(:quote, :x))) == :(symbol.x()) --> > >>> FALSE > >>> > >>> > >>> And stragely > >>> > >>> > >>> Meta.show_sexpr(Expr(:call, Expr(:., :symbol, Expr(:quote, :x)))) == > >>> Meta.show_sexpr(:(symbol.x())) --> TRUE > >>> > >>> > >>> What is going on!? And how do I get these expressions to agree? > >>> > >>> > >>> Vishesh > >>> > >>> > >>> > >>> > >>> > >> > -- Erik Schnetter <[email protected]> http://www.perimeterinstitute.ca/personal/eschnetter/
