创建XML
当创建新的 XML 文档时,Scala 的原生 XML 语法再合适不过。第一个例子是获取创建的 UserList 结构并把它封装在相关服务的节点中。清单6显示了这些代码。
清单 6. 创建服务结果
def results(name:String, cnt:Int, elements:NodeSeq):Any = { |
由于 Scale 提供了对 XML 的原生支持,您可以利用一个模板样式的语法将动态数据插入到 XML 结构中。在本例中,使用传入的名称字符串设置 id 属性。您将获得一串传入的元素,将它们作为正在创建的 Service 元素的子节点。但是要注意,只有在 cnt 参数大于 0 的情况下才执行上述操作。如果 cnt 值等于 0,这个函数将不返回任何值。在 Scale 中您可以通过声明函数返回 Any 来解决这个问题。Any 类在 Scala 中是一个原始的类,类似于 java.lang.Object。Scale 没有 void 类型,但是有一个等价的 Unit 类型。它的优点是可以扩展 Any 类,并且允许函数在某些情况下返回对象,而在其他时候不返回任何内容。
如您所见,在 Scala 的 XML 语法中结合动态数据可以产生强大的功能。再举一个例子,您可以创建一个统计 XML 文档,其中显示的 XML 描述每个服务在提要中出现的次数。代码如清单7所示。
清单 7. 创建统计 XML
def stats(map:HashMap[String,Int]):Node = { |
您的函数要求 HashMap 的键是服务的名称,其值为服务在 FriendFeed 中出现的次数。这个函数使用熟悉的 foreach-closure 风格遍历 HashMap,然后使用 HashMap 的名称/值对创建一个新节点,将这个节点添加到节点队列中。随后创建 Stats 结构并作为动态数据访问节点队列,节点队列随后被赋值给一个 XML 结构。现在准备好了所有函数,您只需驱动程序以便进行测试。
运行和测试
在运行程序之前,需要加入一些代码来驱动它。将创建一个 main 方法,就像使用 Java 编程一样,如清单8所示。
清单 8. FriendFeed main 方法
def main(args:Array[String]) = { |
这个方法创建了 FriendFeed。它接受命令行参数确定哪些服务查找用户并计算统计数据。注意这些语法与 Java 语法非常相似。main 函数接受一个 String 数组(称为 args)作为参数。这个程序为统计文档创建 HashMap,并且为每个服务创建 UserList 文档。然后输出每个 UserList 和统计文档。要运行这个程序,需要使用 scalac FriendFeed.scala 和 scala FriendFeed 进行编译,如清单9所示。
清单 9. 运行程序
$ scalac FriendFeed.scala |
您当然可以选择不同的服务名称作为命令行参数或其他参数。Scala 具备完美的 printer 类,可以使用正确的空格、制表符和格式打印 XML。还提供了 XML 写入程序(writer)将 XML 写回数据流,比如文件。您可以使用 Scala 完成所有普通的任务,同时还可以使用 Scala 提供的一些独有的功能。
结束语
许多人把 Scala 视为 Java 编程语言发展历程中的重要一步。XML 已经成为一种重要的技术,编程语言只有在其语法中内置了 XML 支持,才能自然地应用 XML 技术。而 Scale 做到了这一点。它使得复杂问题变得简单。查看本文使用 Scale 执行的所有功能,想像一下做同样的事情需要使用多少行 Java 代码。
【编辑推荐】






















