[e-lang] inconsistencies with __return ejector

Mark Miller erights at gmail.com
Sun Mar 23 16:26:15 EDT 2008


On Sun, Mar 23, 2008 at 1:05 PM, Toby Murray
<toby.murray at comlab.ox.ac.uk> wrote:
>  I can't see why programmers would ever expect not to be able to use
>  return, especially if they come from an imperative (e.g.  OO)
>  programming background, as so many of us do.


In the code:

def foo(flag) {
    def x := if (flag) { return 3 } else { 4 }
    return x * 2
}

what should foo(true) return? How about foo(false)? If you easily
answered 3 and 8, then you were not surprised that
* the "return" inside the then-block returns from foo and not from the
then-block
* the 4 leaked from the else-block despite the lack of any further annotation.


>  Given that you can't make everyone happy, then it might be best to
>  go with a less subjective measure, rather than "expectations".
>  "Consistency" is perhaps a good objective test to apply here. People may
>  be unhappy but if the behaviour is consistent, then it's easier to
>  justify.

Yes, that's how we arrived at the current behaviors: treat when-blocks
like then-blocks and else-blocks.

-- 
Text by me above is hereby placed in the public domain

    Cheers,
    --MarkM


More information about the e-lang mailing list