in reply to DWIM Part Nineteen: Unary Operators in Void Context

I've run into this issue before, in a C++ class. I want a member foo to act in-place or return a result. What I really want is a succinct way to modify a function, much like + and += are related, as is any @ to its @=.

So, given x.foo() or foo(x), have a universal way to add the "x=" at the beginning. Maybe x.!foo() can mean "do foo in place on x".

I'm not proposing actual (good) syntax; just pointing out the idea. What we really want is a succinct "in place" modifier.

—John

  • Comment on Re: DWIM Part Nineteen: Unary Operators in Void Context

Replies are listed 'Best First'.
Re: Re: DWIM Part Nineteen: Unary Operators in Void Context
by ChemBoy (Priest) on Aug 22, 2001 at 03:00 UTC

    I have read (in Re: Perl 6 RFCs) that something to this effect was in fact proposed for Perl 6: an extension of the =~ to a general modify-in-place operator. In that case, CheeseLord's problem would reduce to

    $foo =~ lc;
    which is distinctly simpler than the current scenario, but still not as tidy as his proposal.

    On the one hand, I personally kind of like the idea of lc/uc/etc DWCM--on the other, just using the binding operator more generally would probably save all manner of backward-compatibility headaches.

    In any case, I don't think the disposition of that particular RFC is yet known--there doesn't seem to have been a new Apocalypse since May, and I don't see the relevant RFC in the list he took care of in 1 and 2. The feedback on the RFC seems to have been largely positive, but of course it's Larry's opinion that counts in the end.



    If God had meant us to fly, he would *never* have given us the railroads.
        --Michael Flanders

Re: Re: DWIM Part Nineteen: Unary Operators in Void Context
by clemburg (Curate) on Aug 21, 2001 at 21:31 UTC

    I think that what you want is called setf() in Common Lisp. Maybe this could give some implementation ideas?

    Christian Lemburg
    Brainbench MVP for Perl
    http://www.brainbench.com

      No, I think setf is just plain assignment. The "place" is not special to the "new value" expression.

      I wonder if the "higher level functions" features in Perl 6 can be used to create this. That would be a good test to see if the proposed feature set is powerful enough.

      —John