OK, thanks! Sometimes I have a really hard time trusting that I understand what I read in these contexts, so its nice to have a friendly email list to help me learn =)
// T On Thursday, August 28, 2014 4:42:16 PM UTC+2, Tim Holy wrote: > > Right, begin...end do not by themselves introduce new scope. So you can > just > ignore them. > > --Tim > > > On Thursday, August 28, 2014 03:43:13 AM Tomas Lycken wrote: > > I have a function, littered with macros, which when I call macroexpand > on > > it returns the following Expr: > > > > quote # /home/tlycken/.julia/v0.3/Interpolations/src/linear.jl, line 12: > > begin > > begin > > ix_1 = ifloor(x_1) > > fx_1 = x_1 - convert(typeof(x_1),ix_1) > > end > > end # line 13: > > begin > > ixp_1 = ix_1 + 1 > > end # line 14: > > begin > > $(Expr(:boundscheck, false)) > > begin > > ret = (one(fx_1) - fx_1) * itp.coefs[ix_1] + fx_1 * > > itp.coefs[ixp_1] $(Expr(:boundscheck, :(Base.pop))) > > end > > end # line 15: > > ret > > end > > > > Now, for my own sanity when I try to reason about this code, it would be > > much easier if I could be sure that the above Expr is equivalent with > this > > one (except for the removal of an @inbounds block): > > > > quote # /home/tlycken/.julia/v0.3/Interpolations/src/linear.jl, line 12: > > ix_1 = ifloor(x_1) > > fx_1 = x_1 - convert(typeof(x_1),ix_1) > > ixp_1 = ix_1 + 1 > > ret = (one(fx_1) - fx_1) * itp.coefs[ix_1] + fx_1 * itp.coefs[ixp_1] > # > > this line previously had @inbounds as well ret > > end > > > > I *think* that the man page on scoping > > <http://julia.readthedocs.org/en/latest/manual/variables-and-scoping/>, > and > > specifically the line *“Notably missing from this list are begin blocks > > < > http://julia.readthedocs.org/en/latest/manual/control-flow/#man-compound-ex > > pressions>, which do not introduce new scope blocks”*, indicate that I’m > > right, but I’m not certain. Could someone confirm this for me? Since I’m > > not assigning the results of the expressions to anything, the > implications > > of begin ... end in this context is still a little shady to me. > > > > // T > > > >
