Can you show how to use the Ref in practice, this is merely for academic purposes, because I had to use the list style anyways for further use of my code?
For your questions: this is no performance critical. On Sunday, August 23, 2015 at 1:18:00 AM UTC+3, Yichao Yu wrote: > > On Sat, Aug 22, 2015 at 2:49 PM, Tero Frondelius > <[email protected] <javascript:>> wrote: > > Why testvariable is not incremented? > > > > function incrementvariable(numb) > > numb += 1 > > end > > function testing() > > global testvariable = 0 > > for i = 1:3 > > incrementvariable(Ptr{testvariable}) > > end > > println(testvariable) > > end > > `+=` is an assignment and not (necessarily) a mutation. A function > cannot change the binding of a variable in another scope. > > What you can do is to mutate the value/object passed in if it is a > mutable type. The way you are using below is a good example of that. > On 0.4 you can use the Ref type instead. (Or simple write you own > counter type `type Counter count::Int end` and use `counter.count += > 1` to increment it). > > As Sisyphuss points out, if you just need a simple local counter, you > don't need to write a incrementvariable function for that. > > If you only need one, a global variable is probably the best choice. > If you are worrying about performance, a mutable const global (either > an length-1 array or a Ref or custom counter type) should do it. > > If you want a local counter that is shared between different functions > (by passing as argument), the way you have below (or a modified > version as mentioned above) is probably the best way. > > > > > Or actually what should I change to get the testvariable incremented? > I'm > > counting how many times one case inside the function incrementvariable > is > > called. I will use this information later in the testing() function. > > > > This will work, but it doesn't look elegant: > > function incrementvariable(numb) > > numb[1] += 1 > > end > > function testing() > > testvariable = [0] > > for i = 1:3 > > incrementvariable(testvariable) > > end > > println(testvariable) > > end > > > > > > >
