Syntax 使用映射的多重赋值';s值,而不是Groovy的变量
在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(" "); 出于某种原因,这似
- 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!)可能能够填补空白。请参阅本页底部-他们没有确切说明原因,只是使用了“简单变量”,这意味着映射不是一个“简单”对象。如果有人比我更精通格言,(比如蒂姆·耶茨!)也许可以填补这些空白。哎呀,看来我自己就是找不到这些信息!很抱歉,谢谢您的回复;)哎呀,看来我自己就是找不到那个信息!很抱歉,谢谢您的回复;)