Scala

Scala 专题教程-隐式变换和隐式参数(3):隐含类型转换

jerry Scala
使用隐含转换将变量转换成预期的类型是编译器最先使用implicit的地方。这个规则非常简单,当编译器看到类型X而却需要类型Y,它就在当前作用域查找是否定义了从类型X到类型Y的隐式定义。 比如,通常情况下,双精度实

Scala 专题教程-隐式变换和隐式参数(2):使用implicits的一些规则

jerry Scala
在Scala中的implicit定义指编译器在需要修复类型匹配时可以用来自动插入的定义。比如说,如果x+y类型不匹配,那么编译器可能试着使用convert(x) + y, 其中convert由某个implicit定义的,这有点类似一个整数和一个浮

Scala 专题教程-隐式变换和隐式参数(1):概述

jerry Scala
应用中自己写的代码和调用的第三方函数库有着一个基本的区别:也就是你可以任意修改和扩展自己写的代码,而一般来说在没有源码的情况下很难扩展第三方函数库,只能利用函数库提供什么就是什么。 C#3.0支持静态扩展方

Scala 专题教程-Extractors(6): 正规表达式

jerry Scala
Extractor一个特别有用的应用是正规表达式,Scala支持正规表达式,尤其是和Extractor配合使用时显得非常便利。生成正规表达式 Scala继承了Java的正规表达式的语法规则。这里我们假定你了解正规表达式。Scala的正规表

Scala 专题教程-Extractors(5): Extractors和Seq 模式

jerry Scala
我们在前面介绍模式匹配介绍了可以使用如下的方式访问列表的元素: List() List(x,y,_*) Array(x,0,0,_) 实际上,这些序列模式内部实现都是使用Extractor来定义的。 比如Scala标准库的List的定义具有下面的定

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定义变量时,你都可以使用模式定义多个变量,此时你定义元组,分别赋值到不同