that is not right, please enter it as an issue   
https://github.com/JuliaLang/julia/issues

(include your minimal example as
```julia 
<example that fails>
``` 
and the commit id)

On Thursday, June 16, 2016 at 10:11:23 AM UTC-4, Chris Rackauckas wrote:
>
> It fails when you put it in a function:
>
> function g(a)
>   if a
>     f() = 2
>   else
>     f() = 3
>   end
>   return f
> end
> f = g(true)
> f() # Returns 3
>
> Even more interestingly, g(false) in another REPL session gives an error: 
> "f not defined". So in this setup you either get the second function (if 
> you ask for the first one), or you get nothing! This is on Commit 59d1539 
> (4 days old master).
>
> On Thursday, June 16, 2016 at 1:34:34 AM UTC-7, Mauro wrote:
>>
>> On Thu, 2016-06-16 at 07:32, Chris Rackauckas <[email protected]> wrote: 
>> > There seems to be an interesting change between v0.4.5 and v0.5. Take a 
>> > look at the following code: 
>> > 
>> >   if largeFluctuations 
>> >     function σ(y,t) 
>> >       dσ = zeros(19) 
>> >       dσ[1] = noiseLevel*1.5y[1] 
>> >       dσ[18]= noiseLevel*6y[18] 
>> >       return(dσ) 
>> >     end 
>> >   else 
>> >     function σ(y,t) 
>> >       dσ = zeros(19) 
>> >       dσ[1] = 0.02y[1] 
>> >       dσ[16]= 0.02y[16] 
>> >       dσ[18]= 0.2y[18] 
>> >       dσ[17]= 0.02y[17] 
>> >       return(dσ) 
>> >     end 
>> >   end 
>> > 
>> > In v0.4.5, this would work as expected: if largeFluctuations was set to 
>> > true, then you would get the first function and if false the second. In 
>> > v0.5, I tracked down to this error where it will always define sigma as 
>> the 
>> > second function. 
>> > 
>> > Is this change intentional? If so, why? 
>>
>> Sounds like a bug to me.  However this works as expected: 
>>
>> julia> a = false 
>> false 
>>
>> julia> if a 
>>        f() = 2 
>>        else 
>>        f() = 3 
>>        end 
>> f (generic function with 1 method) 
>>
>> julia> f() 
>> 3 
>>
>> new session: 
>>
>> julia> a = true 
>> true 
>>
>> julia> if a 
>>        f() = 2 
>>        else 
>>        f() = 3 
>>        end 
>> f (generic function with 1 method) 
>>
>> julia> f() 
>> 2 
>>
>> Maybe you can try to reduce your example further? 
>>
>> > Is the proper way to do this in v0.5 using anonymous functions? I know 
>> > there was a change to faster anonymous functions, but is it as fast as 
>> > regular function, or are there some notable differences? 
>>
>> Anonymous and normal functions are based on the same machinery in 0.5 
>> (e.g. anonymous functions can have methods now too).  Both have the same 
>> performance, also when used inside higher order functions. 
>>
>

Reply via email to