Scala 专题教程-Extractors(4): 可变参数的Extractors

jerry Scala
前面的几个例子中Extractor返回的结果的数目都是固定的,比如EMail返回两个:用户名和域名。有些时候,这显得有些不够灵活。比如你打算匹配一个域名,而返回的部分为域名的各个部分,你可能会写如下的模式: dom m

Scala 专题教程-Extractors(3):无参数和带一个参数的模式定义

jerry Scala
前面例子中的unapply方法在匹配成功时返回一个二元组。这可以很容易的推广到多于两个变量的情况。为了绑定N个变量,unapply方法可以返回一个N元祖,封装在Some中。 对于一个只绑定一个变量的情况有些特殊。Scala没有

Scala 专题教程-Extractors(2):定义 Extractor

jerry Scala
在Scala中Extractor为定义了unapply方法的对象。unapply的作用是匹配一个值,然后从中提取所需的部分。通常unapply和apply一起定义,但这不是必须的。例如,前面定义上篇文章中所需的Email对象。 object EMail {

Scala 专题教程-Extractors(1):分解Email地址的例子

jerry Scala
前面我们介绍了使用模式匹配来分解数据,本专题教程对这些概念加以推广。到目前为止,构造器模式是和Case Class关联在一起的。有些时候你希望使用类似的模式而不需要创建Case Class。实际上你可能希望创建自定义的模

Scala 专题教程-Case Class和模式匹配(10): 模式无处不在

jerry Scala
Scala程序很多地方都可以使用模式,而不仅仅用在模式匹配(match表达式),本篇给出几种使用模式的情况。变量定义 任何时候你使用val或var定义变量时,你都可以使用模式定义多个变量,此时你定义元组,分别赋值到不同

Scala 专题教程-Case Class和模式匹配(9): Option类型

jerry Scala
Scala语言中包含一个标准类型Option类型,代表可选值,Option类型的值可以有两个可能的值,一个为some(x) 其中x为有效值,另外一个为None对象,代表空值。 Option类型的值通常作为Scala集合类型(List,Map等)操作的

Scala 专题教程-Case Class和模式匹配(8): Sealed Classes

jerry Scala
前面说过,在写模式匹配时,你必须保证你所写的可选项覆盖了全部的可能性,因此常常你必须加上一个缺省通配符选项。但这种情况只适应于缺省通配符有意义的情况。如果对于一些没有缺省项的情况,你怎么才能保证你写的

Scala 专题教程-Case Class和模式匹配(7): 重叠模式定义

jerry Scala
Scala在匹配模式时,按照模式定义的顺序依次检查,因此越特定的规则越要先定义,而通用的规则后定义。比如我们修改之前的 def simplifyTop(expr :Expr) :Expr = expr match { case UnOp("-",UnOp("-",e))=&...
阅读全文

Scala 专题教程-Case Class和模式匹配(6): 模式限定修饰

jerry Scala
有些时候,需要对定义的模式做某些限制,比如你需要完成表达式简化,比如两个相同的参数相加 e+e ,你想把它简化为e*2. 也就是 BinOp("+",Var("x"),Var("x")) 转化为 BinOp("*",Var("x"),Number(2)) 你可能试

Scala 专题教程-Case Class和模式匹配(5): 模式的种类(四)

jerry Scala
变量绑定 除了独立的变量模式外,你还可以把一个变量添加到另外的模式中,你简单的定义一个变量,然后再添加一个@符号,然后再写其它的模式。 这就定义了一个变量绑定过的模式。这意味着还是按照标准的模式匹配来匹