Slightly modifying an example from the docs:

julia> function mysub2ind_gen(N)
           ex = :(I[$N] - 1)
           for i = N-1:-1:1
               ex = :(I[$i] - 1 + dims[$i]*$ex)
           end
           return :($ex + 1)
       end
mysub2ind_gen (generic function with 1 method)

julia> @generated function mysub2ind{N}(dims::NTuple{N}, I::Integer...)
           length(I) == N || error("wrong number of indexes")
           mysub2ind_gen(N)
       end
mysub2ind (generic function with 1 method)

julia> mysub2ind_gen(3)
:(((I[1] - 1) + dims[1] * ((I[2] - 1) + dims[2] * (I[3] - 1))) + 1)

julia> mysub2ind((5,5,5), 1, 2, 3)
56

julia> sub2ind((5,5,5), 1, 2, 3)
56


On Wednesday, February 10, 2016 03:31:15 AM Jeffrey Sarnoff wrote:
> Tim -- would you repeat that with some simple content illustrative of a
> useful use for generation --- thx
> 
> On Wednesday, February 10, 2016 at 5:27:12 AM UTC-5, Tim Holy wrote:
> > On Tuesday, February 09, 2016 08:52:22 PM Andy Ferris wrote:
> > > What's the best way to find the code generated by a @generated function?
> > 
> > This isn't easy unless you (or the author) provides a function to do so:
> >     @generated function foo(x, y)
> >     
> >         foo_generator(x, y)
> >     
> >     end
> >     
> >     function foo_generator{Tx,Ty}(::Type{Tx}, ::Type{Ty})
> >     
> >         # generate and return the expression for the function body
> >     
> >     end
> > 
> > Then you can call `foo_generator(typeof(x), typeof(y))` to see the
> > returned
> > code.
> > 
> > Best,
> > --Tim

Reply via email to