Tôi đang đọc 'Groovy in Action' gần đây. Trong chương 7, nó đã giới thiệu *. nhà điều hành . Khi tôi chạy mã về nhà điều hành này, tôi nhận được một số sai lầm.Groovy *. Nhà điều hành
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()
Dòng cuối cùng sẽ ném một ngoại lệ. Lúc đầu, tôi có thể giải thích tại sao lỗi này xảy ra. Các invocies là một List, và kiểu của phần tử là Invoice. Vì vậy, việc sử dụng trực tiếp các mục sẽ gây ra lỗi. Tôi cố gắng khắc phục bằng cách sử dụng invoices.collect{it.items*.total()}
Nhưng vẫn nhận được xác nhận không thành công. Vì vậy, làm thế nào tôi có thể làm cho sự thành công khẳng định và tại sao hoá đơn * .items * .total() sẽ ném một ngoại lệ.
Tuyệt vời, cảm ơn! – linuxlsx