You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2023/04/16 16:15:00 UTC

[jira] [Comment Edited] (GROOVY-9848) Allow membership operator to work on maps

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

Eric Milles edited comment on GROOVY-9848 at 4/16/23 4:14 PM:
--------------------------------------------------------------

Update: Groovy 4.0.1 (GROOVY-7802) added extension "map.withDefault(autoGrow, autoShrink) \{ ... \}" so that it is possible to use "in", "get" or "getAt" without mutation.  As noted above, membership (aka "isCase") implements the semantic "map.get(k) as boolean".  Below are excerpts from {{DefaultGroovyMethods}}.
{code:java}
    public static boolean isCase(Map caseValue, Object switchValue) {
        return DefaultTypeTransformation.castToBoolean(caseValue.get(switchValue));
    }
    public static boolean isCase(Collection caseValue, Object switchValue) {
        return caseValue.contains(switchValue);
    }
{code}

"item in list" is implemented in terms of {{contains}}, so the proposal to implement map membership in terms of {{containsKey}} seems reasonable.  The only concern in my mind is backwards compatibility.  [~paulk] Do you think there is any path forward where {{isCase(Map,Object)}} can return "caseValue.containsKey(switchValue)"?


was (Author: emilles):
GROOVY-7802 requests {{withDefault}} not mutate the underlying map.

> Allow membership operator to work on maps
> -----------------------------------------
>
>                 Key: GROOVY-9848
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9848
>             Project: Groovy
>          Issue Type: Improvement
>            Reporter: Keegan Witt
>            Priority: Major
>




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