[
https://issues.apache.org/jira/browse/JEXL-266?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16579881#comment-16579881
]
Henri Biestro edited comment on JEXL-266 at 8/14/18 2:46 PM:
-------------------------------------------------------------
I'm afraid this is adding a new keyword and modifying the syntax for a very
specific need...
What about trying to expose the iterator and/or the variable through an API to
allow a more generic 'remove(item)' that could be resolved as a method in the
context or arithmetic with a (tbd) signature ?
Actually, you can almost get there by overloading the 'forEach' operator,
creating a (closeable) iterator that wraps the actual one, push it on a stack
-in the context or as a thread local - for remove() to consume, remove()
throwing a JexlContinue to skip to next item.
Have a close look at Interpreter.visit(ASTForeachStatement node...), you'll get
the gist of it.
was (Author: henrib):
I'm afraid this is adding a new keyword and modifying the syntax for a very
specific need...
What about trying to expose the iterator and/or the variable through an API to
allow a more generic 'remove(item)' that could be resolved as a method in the
context or arithmetic with a (tbd) signature ?
Actually, you can almost get there by overloading the 'forEach' operator,
creating a (closeable) iterator that wraps the actual one, push it on a stack
-in the context or as a thread local - for remove() to consume, remove()
throwing a JexlContinue to skip to next item.
> Allow to remove an element from iterator collection within for-loops
> --------------------------------------------------------------------
>
> Key: JEXL-266
> URL: https://issues.apache.org/jira/browse/JEXL-266
> Project: Commons JEXL
> Issue Type: New Feature
> Affects Versions: 3.1
> Environment: I have created a patch as initial implementation for
> this new feature, please see github pull request here
> [pr#5|https://github.com/apache/commons-jexl/pull/5]. I whould be very
> grateful if this could be interesting for the community and included in
> master branch. Thanks in advance!
> Reporter: Dmitri Blinov
> Priority: Minor
>
> The for-loop in JEXL provides a convenient way to iterate over different
> types of collections, however, its not possible for a script writer to
> utilize underlying
> {code:java}
> iterator.remove(){code}
> method within such a loop. The proposal is to introduce new {{remove}}
> statement which should be used within for-loops and should internally call
> {{iterator.remove()}} method and skip the loop to the next element;
> For example, the following code should remove items {{1,2,3}} from set and
> return value {{3}}.
> {code:java}
> var set = {1,2,3,4,5,6}; for (var item : set) if (item <= 3) remove; return
> size(set)
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)