我最近正在阅读“Groovy in Action”。在第 7 章中,它介绍了 *. 操作员 。当我运行有关此运算符的代码时,我遇到了一些错误。
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()
最后一行将引发异常。首先,我可以解释为什么会发生这个错误。发票是一个列表,元素的类型是发票。所以直接使用items会报错。我尝试通过使用来修复它invoices.collect{it.items*.total()}
但仍然得到一个失败的断言。那么,我怎样才能使断言成功以及为什么 invoices*.items*.total() 会抛出异常。