属兔的处子.pdfVIP

  • 5
  • 0
  • 约2.82千字
  • 约 25页
  • 2017-11-24 发布于天津
  • 举报
属兔的处子

属兔的处子 Clojure太灵活,臣妾驾驭不住啊! 何婧誉(Loretta) • 剑桥大学 • 高盛……花旗……SwiftKey……微软…… • Morgan Stanley ! • 这是一个Clojure的分享,但我现在在写Scala • 为啥?摩根士丹利的优点…… • We are hiring! Clojure辣么灵活, 不就是因为动态类型吗? 不信你看! 咱们写个读json的,一行妥妥的! 然而…… 读了之后数据是什么样儿的? 刚才还是简单的…… 你们觉得:name的值应该是什么样儿的? String? Vector? List? 看到代码之前完全不明白要怎么用 来看个实例 感谢链家!^_^ • 来北京嘛,不得不关注一下大家都关注的房价 • 去链家网上看了看二手房 • 一页一页的数据太难整理啦! • 写个程序抓取一下d(` ・∀・)b 注:此次实验中没有链家服务器受到伤害,请大(鸟)家(哥)放心! Intellij 中vanilla项目demo 灵活的胖子 core.typed 加个类型系统 core.typed • 通过一个库给动态语言加上类型系统——即插即用 • 可以给已经写好的函数或者是用的无类型库标注类型 • 可以选择性地加上类型 • 加上了类型也并非一定要type check core.typed • 支持Option Type,Ordered Intersection Types, Union Types • 支持Heterogenous Maps和Sequentials • 支持Polymorphism (All, Context Bounds ),Higher-Kinds • 支持Occurrence Typing ! (通过检查control flow进行类型推导) • 宏也会被展开后再推导类型 It’s Amazing! Demo the typed project 但是并不完美 • 宏一复杂了还是不行 • 要不停地给用的库加类型—— 自己加上了类型的Clojure库实在太 少了…… • 不少核心函数根本没法儿加类型 • 于是你开始到处加^:no-check…… 没有别的办法了吗? 给兔子加上牵引绳 core.spec Contract式限制 core.spec • Runtime性能基本不会受到影响 (缺省spec验证关闭) • Map 的类型应该就是key及其对应的值的类型!(keys) • Sequence可以多方面限制 (cat, alt, regex style matching, coll-of ) • 只有一个参数的返回boolean值的函数通通都自动成为predicate • 各种验证方式,满足你的需求(conform, explain, valid?) • multi-spec支持更复杂的数据结构 spec项目demo 生成性测试 测试复杂数据结构是麻烦的 • Haskell的quickcheck是生成性测试的鼻祖 • 顾名思义,生成性测试就是自己生成测试数据的测试 • 生成性测试可以省去模拟数据的麻烦 • 生成性测试还会自动缩小至失败的最小案例以供debug • 用core.spec定义了函数的spec之后,即可用check 自动进行生成型 测试 • 除非数据结构范围宽广,自带的generator不够用 • 但可以用自定义的generator补充 core.typed vs core.spec - pro core.typed core.spec • Require时检查 • 基本通过测试检查

文档评论(0)

1亿VIP精品文档

相关文档