快速业务通道

面向Java开发人员的Scala指南 - 用Scitter更新Twitter - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
成各自的 Map 条目。然后,将一个新的 Map(由新创建的 Map 和从递归调用返回的 Map 组成 )返回到 optionsToMap。

然后,将 OptionalParam 的 Array[] 传递到 optionsToMap 嵌套函数。然 后,将返回的 Map 与我们构建的包含 status 消息的 Map 连接起来。最后,将 新的 Map 和用户名、密码一起传递给 Scitter.execute() 方法,以传送到 Twitter 服务器。

随便说一句,所有这些任务需要的代码并不多,但是需要更多的解释,这是 比较优雅的编程方式。

潜在的重构

理论上,传给 update 的可选参数与传给其他基于 GET 的 API 调用的可选 参数将受到同等对待;只是结果的格式有所不同(结果是用于 POST 的名称/值 对,而不是用于 URL 的名称/值对)。

如果 Twitter API 需要其他 HTTP 动作支持(PUT 和/或 DELETE 就是可能 需要的动作),那么总是可以将 HTTP 参数作为特定参数 — 也许又是一组 case 类 — 并让 execute() 以一个 HTTP 动作、URL、名称/值对的 map 以及 (可选)用户名/密码作为 5 个参数。然后,必要时可以将可选参数转换成一个 字符串或一组 POST 参数。这些内容只需记在脑中就行了。

显示

show 调用接受要检索的 Twitter 状态的 id,并显示 Twitter 状态。和 update 一样,这个方法非常简单,无需再作说明,如清单 7 所示:

清单 7. Scitter v0.3: show

package  com.tedneward.scitter {   class Scitter   {    // ...    def show(id : Long) : Option[Status] =    {     val (statusCode, body) =      Scitter.execute("http://twitter.com/statuses/show/" + id  + ".xml",    username, password)     if (statusCode == 200)     {      Some(Status.fromXml(XML.loadString(body)))     }     else     {      None     }    }   } }

还有问题吗?

面向Java开发人员的Scala指南 - 用Scitter更新Twitter(6)

时间:2010-12-04 IBM Ted Neward

另一种显示方法

如果想再试一下模式匹配,那么可以看看清单 8 中是如何以另一种方式编写 show() 方法的:

清单 8. Scitter v0.3: show redux

package  com.tedneward.scitter {   class Scitter   {    // ...    def show(id : Long) : Option[Status] =    {     Scitter.execute("http://twitter.com/statuses/show/" + id +  ".xml",       username, password) match      {      case (200, body) =>       Some(Status.fromXml(XML.loadString(body)))      case (_, _) =>       None     }    }   } }

这个版本比起 if/else 版本是否更加清晰,这很大程度上属于审美的问题, 但公平而论,这个版本也许更加简洁。(很可能查看代码的人看到 Scala 的 “ 函数” 部分越多,就认为这个版本越吸引人。)

但是,相对于 if/else 版本,模式匹配版本有一个优势:如果 Twitter 返 回新的条件(例如不同的错误条件或来自 HTTP 的响应代码),那么模式匹配版 本在区分这些条件时可能更清晰。例如,如果某天 Twitter 决定返回 400 响应 代码和一条错误消息(在主体中),以表明某种格式错误(也许是没有正确地重 新 Tweet),那么与 if/else 方法相比,模式匹配版本可以更轻松(清晰)地 同时测试响应代码和主体的内容。

还应注意,我们还可以使用清单 8 中的方式创建一些局部应用的函数,这些 函数只需要 URL 和参数。但是,坦白说,这是一种自找麻烦的解放方案,所以 我不会采用。

面向Java开发人

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号