Scala 专题教程-隐式变换和隐式参数(7):View 限定

jerry Scala
上篇的例子 def maxListImpParam[T](element:List[T]) (implicit orderer:T => Ordered[T]):T = element match { case L...
阅读全文

Scala 专题教程-隐式变换和隐式参数(8):当有多个隐含转换可以选择时

jerry Scala
有时在当前作用域可能存在多个符合条件的隐含转换,在大多数情况下,Scala编译器在此种情况下拒绝自动插入转换代码。隐含转换只有在转换非常明显的情况下工作良好,编译器只要例行公事插入所需转换代码即可。如果当

Scala 专题教程-隐式变换和隐式参数(6):隐含参数(二)

jerry Scala
隐含参数的另外一个用法是给前面明确定义的参数补充说明一些信息。 我们先给出一个没有使用隐含参数的例子: def maxListUpBound[T <:Ordered[T]](element:List[T]):T = element match { case...
阅读全文

Scala 专题教程-隐式变换和隐式参数(5):隐含参数(一)

jerry Scala
编译器可以自动插入implicit的最后一个用法是隐含参数。 比如编译器在需要是可以把someCall(a)修改为someCall(a)(b)或者new someClass(a) 修改为new SomeClass(a)(b),也就是说编译器在需要的时候会自动补充缺少的

Scala 专题教程-隐式变换和隐式参数(4):转换被方法调用的对象

jerry Scala
隐式变换也可以转换调用方法的对象,比如但编译器看到X.method,而类型X没有定义method(包括基类)方法,那么编译器就查找作用域内定义的从X到其它对象的类型转换,比如Y,而类型Y定义了method方法,编译器就首先使用

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的定义具有下面的定