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
>>>
>>>
>>

Reply via email to