在Groovy中的多个赋值中获取列表的尾部

Groovy中的列表解构(多重赋值)可用于将值绑定到列表中的变量.例如:

def (first,second,third) = [1,2,3,4,5,6]
assert third == 3

是否有一种语法方式来实现以下目标:

def (first,<rest>) = [1,6]
assert ​rest​ == [3,6]

如果不是,最接近/最常用的方法是什么才能获得相同的结果,最好是单表达式?

解决方法

您需要做的是按照您描述的方式将列表从六个元素转换为三个元素.即将[1,6]变换为[1,[3,6]].您可能还希望将其调整为任意数量的元素.

这是一个解决方案,其中向List添加一个方法reduce,它以建议的方式转换列表:

List.MetaClass.reduce = { int size -> delegate[0..size-2] + [delegate[size-1..-1]] }

def (first,rest) = [1,6].reduce(3)
assert first == 1
assert second == 2
assert rest == [3,6]

编辑:昨晚,在睡觉的时候,我想用它来实现这个作为一个班轮.它与上面的想法相同,但由于逻辑内联,因此更加神秘(不太可读).

def (first,6].with { it[0..1] + [it[2..-1]] }
assert first == 1
assert second == 2
assert rest == [3,6]

相关文章

背景:    8月29日,凌晨4点左右,某服务告警,其中一个...
https://support.smartbear.comeadyapi/docs/soapui/steps/g...
有几个选项可用于执行自定义JMeter脚本并扩展基线JMeter功能...
Scala和Java为静态语言,Groovy为动态语言Scala:函数式编程,...
出处:https://www.jianshu.com/p/ce6f8a1f66f4一、一些内部...
在运行groovy的junit方法时,报了这个错误:java.lang.Excep...