gpt4 book ai didi

groovy - Groovy *。运营商

转载 作者:行者123 更新时间:2023-12-04 13:42:19 25 4
gpt4 key购买 nike

我最近正在读《行动中的格鲁夫》。在第7章中,它介绍了*。运算符(operator) 。当我运行有关此运算符的代码时,我会遇到一些错误。

class Invoice {                                          
List items
Date date
}
class LineItem {
Product product
int count
int total() {
return product.dollar * count
}
}
class Product {
String name
def dollar
}

def ulcDate = new Date(107,0,1)
def ulc = new Product(dollar:1499, name:'ULC')
def ve = new Product(dollar:499, name:'Visual Editor')

def invoices = [
new Invoice(date:ulcDate, items: [
new LineItem(count:5, product:ulc),
new LineItem(count:1, product:ve)
]),
new Invoice(date:[107,1,2], items: [
new LineItem(count:4, product:ve)
])
]

//error
assert [5*1499, 499, 4*499] == invoices.items*.total()

最后一行将引发异常。
首先,我可以解释为什么会发生此错误。这些消息是一个列表,元素的类型是发票。因此,直接使用项目会出错。我尝试使用 invoices.collect{it.items*.total()}修复它

但是仍然会失败。因此,我如何使断言成功以及为什么发票* .items * .total()会引发异常。

最佳答案

invoices*.运算符的结果是一个列表,因此invoices*.items的结果是一个列表的列表。 flatten()可以应用于列表并返回平面列表,因此您可以使用它从LineItems列表列表中创建ListItems列表。然后,您可以使用传播运算符将total()应用于其元素:

assert [5*1499, 499, 4*499] == invoices*.items.flatten()*.total()

关于groovy - Groovy *。运营商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10715027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com