Block Lambdas: break and continue
Brendan Eich
brendan at mozilla.org
Mon Jan 16 14:16:58 PST 2012
> Allen Wirfs-Brock <mailto:allen at wirfs-brock.com>
> January 15, 2012 2:31 PM
>
>
>> We could try for other syntax, but it too would have the body-less
>> problem. Unless we use a new keyword:
>>
>>> loop arr.forEach {|o|
>>> if (...) break;
>>> }
>>
>
> Even though these are not necessarily "loops", I think *loop* is still
> a plausible keyword.
Couple of alternative-syntax thoughts:
1. Empty label as optional prefix to CallWithBlockArguments, to make the
block-lambda argument(s) breakable or continuable:
: arr.forEach {|o|
if (...) break;
...
}
The idea is that break or continue without label targets the nearest
empty label or predefined target statement, whichever is closer. But I
propose to narrow this to be a special prefix form only for
CallWithBlockArguments.
In an expression context the leading colon requires parenthesization if
used in the consequent of a ternary (?:) expression. In an object
literal's PropertyAssignment you'd get a confusing ": :" juxtaposition.
So it probably is better to require parentheses around
empty-label-prefixed calls in all expressions.
The continue case would exit the containing block-lambda argument to the
:-labeled CallWithBlockArguments instead of exiting the whole
CallWithBlockArguments expression.
2. Variation on empty label: support "do" as a reserved-identifier label
that is implicitly addressed by break; and continue; (no labels on the
break and continue). A little Smalltalk homage and not so visually nasty
and potentiailly confusing as empty label.
do: arr.forEach {|o|
if (...) break;
...
}
To complete the Smalltalk homage we would want this in expressions, and
we'd also want do: to take a block-lambda directly, in addition to a
CallWithBlockArguments.
This variation is future-hostile to leading-colon as statement- or
expression-starting special forms (see
http://wiki.ecmascript.org/doku.php?id=strawman:return_to_label). I
think that this is acceptable but I could be missing something.
Comments welcome.
/be
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120116/320de098/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: postbox-contact.jpg
Type: image/jpeg
Size: 1293 bytes
Desc: not available
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20120116/320de098/attachment.jpg>
More information about the es-discuss
mailing list