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/

Reply via email to