On 02/09/13 16:18, Artur Skawina wrote:
Requiring captures to be explicit would reduce the chance of such
bugs happening, but also have a significant cost and be a rather
drastic change to the language...

For what it's worth, I'm not advocating for any change in the language. I'm simply highlighting a place where it's possible to shoot oneself in the foot :-)

In this case, there's no need for a delegate, as you do not want
to operate on the original object. So you can simply do:

     //...
     private void function(ref typeof(this)) _jump;
     private void jump() { _jump(this); }

     this(size_t max)
     {
         _max = max;
         _jump = &jump10;
     }
     //...
     static jump10(ref typeof(this)this_)
     {
         this_._count += 10;
         writeln("At end of jump, count = ", this_._count);
     }

It's cheaper than the other alternative (updating ctx in cpctor),
but slightly more verbose. More importantly, AFAICT, this is a
better fit for the actual problem.

Oh, nice thought.  Thank you! :-)

Reply via email to