Syntax 使用映射的多重赋值';s值,而不是Groovy的变量

Syntax 使用映射的多重赋值';s值,而不是Groovy的变量,syntax,groovy,Syntax,Groovy,在Groovy中,我有一个返回三元组的函数。 我想: put在Map中为任意键返回的第一个值,并且 将另外两个值分配给变量 我可以做到: Map m = [:] (day, month, year) = "12 February 2014".split(" "); m["day"] = day; 但是我想去掉变量day,如下所示: Map m = [:] (m["day"], month, year) = "12 February 2014".split(" "); 出于某种原因,这似

在Groovy中,我有一个返回三元组的函数。 我想:

  • put
    Map
    中为任意键返回的第一个值,并且
  • 将另外两个值分配给变量
我可以做到:

Map m = [:]
(day, month, year) = "12 February 2014".split(" ");
m["day"] = day;
但是我想去掉变量
day
,如下所示:

Map m = [:]
(m["day"], month, year) = "12 February 2014".split(" ");

出于某种原因,这似乎是不可能的。这是编译器提醒我的:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/web/com/139223923319646/main.groovy: 2: expecting ')', found ',' @ line 2, column 10.
   (m["day"], month, year) = "12 February 2014".split(" ");
            ^

你们能不能帮我一下,或者向我解释一下为什么不能使用这种语法?

根据官方的说法,不幸的是,这是不可能的

目前,只有简单变量可能是多个变量的目标 赋值表达式,例如,如果您有一个名为firstname的person类 和lastname字段,当前无法执行此操作:

(p.firstname, p.lastname) = "My name".split()

您的第一个示例是目前实现这一点的最佳方法。

根据

目前,只有简单变量可能是多个变量的目标 赋值表达式,例如,如果您有一个名为firstname的person类 和lastname字段,当前无法执行此操作:

(p.firstname, p.lastname) = "My name".split()
您的第一个示例是目前执行此操作的最佳方法。

您可以执行以下操作:

def dstr = "12 February 2014"
def m = [['day', 'month', 'year'], dstr.split( " " )].transpose()
                                                     .collectEntries()
得到

assert m == [ day:'12', month:'February', year:'2014' ]
但我不确定这是你想要的…

你可以这样做:

def dstr = "12 February 2014"
def m = [['day', 'month', 'year'], dstr.split( " " )].transpose()
                                                     .collectEntries()
得到

assert m == [ day:'12', month:'February', year:'2014' ]

但我不确定这是否是您想要的…

请参阅本页底部-他们没有确切说明原因,只是使用了“简单变量”,这意味着您的映射不是“简单”对象。一些更精通Groovy的人(比如Tim Yates!)可能能够填补空白。请参阅本页底部-他们没有确切说明原因,只是使用了“简单变量”,这意味着映射不是一个“简单”对象。如果有人比我更精通格言,(比如蒂姆·耶茨!)也许可以填补这些空白。哎呀,看来我自己就是找不到这些信息!很抱歉,谢谢您的回复;)哎呀,看来我自己就是找不到那个信息!很抱歉,谢谢您的回复;)