WEB开发网
开发学院软件开发Java 实战 Groovy: 用 curry 过的闭包进行函数式编程 阅读

实战 Groovy: 用 curry 过的闭包进行函数式编程

 2009-11-19 00:00:00 来源:WEB开发网   
核心提示: 例如,考虑用来表示图书馆库存的类 Library 和类 Book 之间的一对多关系,实战 Groovy: 用 curry 过的闭包进行函数式编程(8),可以用 List 或 Map 实现这个关系;但是 Map 提供的优势是它能提供快速的查询,也就是说用图书目录编号作为键, 清单 9 显示了一个使

例如,考虑用来表示图书馆库存的类 Library 和类 Book 之间的一对多关系。可以用 List 或 Map 实现这个关系;但是 Map 提供的优势是它能提供快速的查询,也就是说用图书目录编号作为键。

清单 9 显示了一个使用 Map 的简单的一对多关系。请注意 Library 类中的两个显示方法。引入访问者时,两者都是重构的目标。


清单 9. 图书馆应用程序
class Book {   
  @Property title 
  @Property author 
  @Property catalogNumber 
  @Property onLoan = false 
 String toString() { 
    return "Title: ${title}; author: ${author}" 
  } 
} 
class Library { 
  @Property name 
  @Property stock = [ : ] 
   
 def addBook(title, author, catalogNumber) { 
    def bk = new Book(title : title, author : 
     author, catalogNumber : catalogNumber) 
    stock[catalogNumber] = bk 
  } 
   
  def lendBook(catalogNumber) { 
    stock[catalogNumber].onLoan = true 
  } 
   
  def displayBooksOnLoan() { 
    println "Library: ${name}" 
    println "Books on loan" 
    stock.each { entry -> 
      if(entry.value.onLoan == true) println entry.value 
    } 
  } 
   
  def displayBooksAvailableForLoan() { 
    println "Library: ${name}" 
    println "Books available for loan" 
    stock.each { entry -> 
      if(entry.value.onLoan == false) println entry.value 
    } 
  }   
} 
def lib = new Library(name : 'Napier') 
lib.addBook('Groovy', 'KenB', 
 'CS123') 
lib.addBook('Java', 'JohnS', 'CS456') 
lib.addBook('UML', 'Ken and John', 
 'CS789') 
lib.lendBook('CS123') 
lib.displayBooksOnLoan() // Title: Groovy; author: KenB 
lib.displayBooksAvailableForLoan() // Title: UML; author: Ken and John 
 // Title: Java; author: JohnS 

上一页  3 4 5 6 7 8 9 10  下一页

Tags:实战 Groovy curry

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接