You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Felix Schnabel (Jira)" <ji...@apache.org> on 2022/09/24 22:13:00 UTC

[jira] [Comment Edited] (GROOVY-10682) Provide eachWithIndex for primitive arrays

    [ https://issues.apache.org/jira/browse/GROOVY-10682?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17609061#comment-17609061 ] 

Felix Schnabel edited comment on GROOVY-10682 at 9/24/22 10:12 PM:
-------------------------------------------------------------------

I would have some questions about the new {{ArrayGroovyMethods}} approach:
 # This class should be contained in the same folder as {{DefaultGroovyMethods}} and also extend {{DefaultGroovyMethodsSupport}}? Is there anything else that needs to be done that the methods defined in this class are available at groovy runtime?
 # Should each instance of {{each}} that works with lists or arrays be moved to this new class (`each` on maps would still stay in {{DefaultGroovyMethods}})? There are currently:
 ## each(T[] self, Closure closure) -> move
 ## each(primitive[] self, Closure closure) -> move
 ## each(T self, Closure closure) -> move?
 ## each(Iterable<T> self, Closure closure) -> move?
 ## each(Iterator<T> self, Closure closure) -> move?
 ## each(Collection<T> self, Closure closure) -> don't move?
 ## each(List<T> self, Closure closure) -> don't move?
 ## each(Set<T> self, Closure closure) -> don't move?
 ## each(SortedSet<T> self, Closure closure) -> don't move?
 ## each(Map<K, V> self, Closure closure) -> don't move

I would still write the hand coded primitive extensions with the actual implementation (option 1) since it is the most efficient unless you want prefer one of the other options.


was (Author: JIRAUSER295331):
I would have some questions about the new `ArrayGroovyMethods` approach:
 # This class should be contained in the same folder as `DefaultGroovyMethods` and also extend `DefaultGroovyMethodsSupport`? Is there anything else that needs to be done that the methods defined in this class are available at groovy runtime?
 # Should each instance of `each` that works with lists or arrays be moved to this new class (`each` on maps would still stay in `DefaultGroovyMethods`)? There are currently:
 ## each(T[] self, Closure closure) -> move
 ## each(primitive[] self, Closure closure) -> move
 ## each(T self, Closure closure) -> move?
 ## each(Iterable<T> self, Closure closure) -> move?
 ## each(Iterator<T> self, Closure closure) -> move?
 ## each(Collection<T> self, Closure closure) -> don't move?
 ## each(List<T> self, Closure closure) -> don't move?
 ## each(Set<T> self, Closure closure) -> don't move?
 ## each(SortedSet<T> self, Closure closure) -> don't move?
 ## each(Map<K, V> self, Closure closure) -> don't move

I would still write the hand coded primitive extensions with the actual implementation (option 1) since it is the most efficient unless you want prefer one of the other options.

> Provide eachWithIndex for primitive arrays
> ------------------------------------------
>
>                 Key: GROOVY-10682
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10682
>             Project: Groovy
>          Issue Type: Improvement
>          Components: groovy-jdk
>            Reporter: Eric Milles
>            Assignee: Eric Milles
>            Priority: Minor
>
> Consider the following:
> {code:groovy}
> @groovy.transform.TypeChecked
> void test(int[] ints) {
>   ints.eachWithIndex { value, index ->
>     println "$index: ${value.doubleValue()}"
>   }
> }
> test(0,1,2,3,4,5)
> {code}
> Compiler reports "[Static type checking] - Cannot find matching method java.lang.Object#doubleValue()"
> {{eachWithIndex}} is only provided for reference types, so "value" is seen as Object by the type checker.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)