groovy

When creating a map, the key cannot reference to a variable?

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Won't Fix
  • Affects Version/s: 1.0-JSR-4
  • Fix Version/s: 1.0-JSR-6
  • Component/s: None
  • Labels:
    None
  • Number of attachments :
    0

Description

Let's say I evaluate the following:
key = "actualKey"
map = [key:"value"]
print map

The result will be: {key=value}. What I would like to get is {actualKey=value}

Is this a bug or an intended feature? Basically the key of a map is always interpreted as a string - even if it matches an actual string variable in the scope.

I can use the following workaround, but I feel it's a bit ugly. Are there any better alternatives available?
key = "actualKey"
map = ["$key":"value"]
print map

Activity

Hide
Guillaume Laforge added a comment -

By default, keys are strings, so when writing map = [key:"value"], it's equivalent to map = ["key":"value"]
If you actually want to use the value of a variable as a key, you have to put the key between parentheses: map = [(key):"value"]

Show
Guillaume Laforge added a comment - By default, keys are strings, so when writing map = [key:"value"], it's equivalent to map = ["key":"value"] If you actually want to use the value of a variable as a key, you have to put the key between parentheses: map = [(key):"value"]
Hide
Ryan Misek added a comment -

The solution we used for this (not very Groovyish but ...) was:

def key = "acutalKey"
map.put(key,"value")

Until reading the first comment, I never thought about forcing the evaluation of the key variable by enclosing it in parens.

Show
Ryan Misek added a comment - The solution we used for this (not very Groovyish but ...) was: def key = "acutalKey" map.put(key,"value") Until reading the first comment, I never thought about forcing the evaluation of the key variable by enclosing it in parens.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: