[ 
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)

Reply via email to