Крутой *. Операторы

Недавно я прочитал «Groovy в действии». В главе 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()  

Последняя строка вызовет исключение. Во-первых, я могу объяснить, почему эта ошибка произошла. Счета-фактуры представляют собой список, а тип элемента — счет-фактура. Таким образом, прямое использование предметов приведет к ошибке. Я пытаюсь исправить это, используя invoices.collect{it.items*.total()}

Но все равно получаю отказ. Итак, как я могу добиться успеха и почему invoices*.items*.total() вызовет исключение.

6
задан linuxlsx 23 May 2012 в 07:05
поделиться