It is just a way to define an anonymous function. It is not a way to define an "inner" function in that sense.
On Mon, Apr 28, 2014 at 9:24 AM, Peter Simon <psimon0...@gmail.com> wrote: > My question concerns where this handle comes from. Isn't the handle > coming from the output of 'open'? Since 'open' is the "outer" function of > the 'do' construct, then why doesn't the outer function in the first > example also supply its output as input to its inner function? > > > On Sunday, April 27, 2014 8:40:27 PM UTC-7, Amit Murthy wrote: > >> Without using a do-block, you would need to pass in a function as the >> first argument to 'map'. >> 'open' has a variant where the first argument is again a function that >> accepts an open handle. >> >> The do-block syntax in this case just allows you to define the said >> function. >> >> >> On Mon, Apr 28, 2014 at 8:55 AM, Peter Simon <psimo...@gmail.com> wrote: >> >>> In the Julia manual, the second example in block-syntax-for-function- >>> arguments<http://docs.julialang.org/en/latest/manual/functions/#block-syntax-for-function-arguments> >>> contains >>> the following do block: >>> >>> open("outfile", "w") do f >>> write(f, data) >>> end >>> >>> and the documentation states that "The function argument to open receives a >>> handle to the opened file." I conclude from this that the return value >>> (i.e., the file handle) of the open function is passed to this function f >>> -> write(f, data) that is used as the first argument of open. So far, so >>> good (I think). But now I go back and take another look at the first do >>> block example: >>> >>> map([A, B, C]) do x >>> if x < 0 && iseven(x) >>> return 0 >>> elseif x == 0 >>> return 1 >>> else >>> return x >>> endend >>> >>> I try to interpret this example in light of what I learned from the second >>> example. The map function has a return value, consisting of the array [A, >>> B, C], modified by applying the function in the do block to each element. >>> If this example behaved like in the second example, then the output of the >>> map function should be passed as an input to the function defined in the do >>> block. Clearly this doesn't happen, so the lesson I learned from the >>> second example doesn't apply here, apparently. Why not? Under what >>> conditions is the output of the outer function passed as an input to the >>> inner function? >>> >>> I must be looking at this wrong and would appreciate some help in getting >>> my mind right :-). >>> >>> Thanks, >>> >>> Peter >>> >>> >>