面向 Java 开发人员的 Scala 指南: 用 Scitter 更新 Twitter
2009-12-09 00:00:00 来源:WEB开发网也许这个方法中最 “不同” 的部分就是其中定义的嵌套函数 — 与使用 GET 的其他 Twitter API 调用不同,Twitter 期望传给 POST 的参数出现在执行 POST 的主体中,这意味着在调用 Scitter.execute() 之前需要将它们转换成 Map 条目。但是,默认的 Map(来自 scala.collections.immutable)是不可变的,这意味着可以组合 Map,但是不能将条目添加到已有的 Map 中。
可变集合
在 Scala 中可以使用可变集合,只需导入 scala.collections.mutable 包,而不是 scala.collections.immutable。但是,这样做要冒常见的 使用可变数据 的风险,所以常规的 Scala 编程风格建议从其他不可变集合创建不可变集合。如果确实需要或想要使用可变集合,那么可以导入 scala.collections,然后用部分包名前缀按 mutable.Map 或 immutable.Map 的方式引用 Map(或其他)集合类型。这样可以避免在一个块中同时使用可变集合和不可变集合时出现混淆。
解决这个小难题的最容易的方法是递归地处理传入的 OptionalParam 元素的列表(实际上是一个 Array[])。我们将每个元素拆开,将它转换成各自的 Map 条目。然后,将一个新的 Map(由新创建的 Map 和从递归调用返回的 Map 组成)返回到 optionsToMap。
然后,将 OptionalParam 的 Array[] 传递到 optionsToMap 嵌套函数。然后,将返回的 Map 与我们构建的包含 status 消息的 Map 连接起来。最后,将新的 Map 和用户名、密码一起传递给 Scitter.execute() 方法,以传送到 Twitter 服务器。
随便说一句,所有这些任务需要的代码并不多,但是需要更多的解释,这是比较优雅的编程方式。
潜在的重构
理论上,传给 update 的可选参数与传给其他基于 GET 的 API 调用的可选参数将受到同等对待;只是结果的格式有所不同(结果是用于 POST 的名称/值对,而不是用于 URL 的名称/值对)。
更多精彩
赞助商链接