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 >
