05-05 学习记录

scala extractor and regex

最近遇到一个场景:输入三个数字,用逗号分隔,同时要求三个数字两两不相同。
常规解析需要分割出三个数字,转成整型,判断边界条件,最后判断两两是否相同。
重新温习了下scala的extractor,发现如下代码就可以清晰明了地解决这个场景:

这里主要有以下几点:

  • 正则表达式的模式匹配,注意PATTERN
  • 变量绑定的模式匹配,注意_ @ Digit(a)
  • 最后一个两两互不相等的使用guard实现

这样的解析相比low-level的处理要清晰很多。

JSON解析器

复习了一下Scala的JavaTokenParsers,重新写了次JSON解析器。
自己也尝试过非JavaTokenParsers的,记得当时自己用的还是Specs(不是电视剧名字),现在觉得scalatest更上手点。
其实下面的代码和《Scala编程》上基本是一样的,因为我就是参照那本书的语法定义来的。