+1 for !

On Saturday, April 9, 2016 at 8:09:23 AM UTC+2, Christof Stocker wrote:
>
> I also prefer the ! so I know it modifies an existing plot. If I don't use 
> a ! then I expect to create a new one
>
> On 2016-04-09 02:52, Daniel Carrera wrote:
>
> Ok. Thanks for the explanation. 
>
> Cheers,
> Daniel.
>
> On 9 April 2016 at 02:30, Tom Breloff <[email protected] <javascript:>> 
> wrote:
>
>> I understand that to you this seems intuitive, but to me it is completely 
>>> counter-intuitive. The function that I'm calling is not changing any of its 
>>> inputs. Telling me that behind the scenes it calls "plots!" is describing 
>>> an implementation detail that can change and should have no bearing on the 
>>> exposed API.
>>>
>>
>> It's not behind the scenes or an implementation detail. The "proper, 
>> exposed" API looks like:
>>
>> plt = plot(rand(10))
>> plot!(plt, xlim = (0,20))
>>
>> Here plt is a julia object.  It's constructed during the first call, and 
>> changed in the second call.  This is the only form that should be used for 
>> "serious" work, as you shouldn't depend on global state in general.  For 
>> your original example, you were on the right track:
>>
>> plt = plot(title = "...", xaxis = (...), ...)
>> for dir in directories
>>     ... do some work ...
>>     plot!(plt, result, ...)
>> end
>>
>> You can set up the plot attributes in the first call, and then add series 
>> (data) with your results.
>>
>> In your original code, what if there's something in that "do some work" 
>> that calls a plotting command?  (answer... your code breaks)  So the 
>> mutating plot call without an AbstractPlot as the first argument is really 
>> only meant for quick, one-off, analytic work.  It's not meant to be the 
>> primary usage pattern.
>>
>> I would argue that "plots(plt, ...)" is like "write(stream, ...)"
>>>
>>
>> In this example, plt is a julia object that is mutated, whereas stream is 
>> effectively unchanged (it still points to the same file descriptor, or 
>> whatever it wraps).  
>>
>> The better analogies (IMO) are:
>>
>> plt = plot()
>> x = rand(10)
>>
>> # these are similar
>> push!(x, rand())
>> plot!(plt, x)
>>
>> # these are similar
>> show(io, x)
>> display(plt) 
>>
>>
>>
>
>

Reply via email to