Scala语言自身的一些特性总结

Scala中的一些特性--Scala特性,可以从基本语言特征。面向对象特点、并发编程、函数式编程以及自身的特有地方构成。本次主要涉及自身的一些特点
 模式匹配
 隐式转换
 类型系统

模式匹配

1.eg:
       patteh match{
       case 1 => println('1')
       case_ => println("其他")
       }
match语句匹配的对象,以及case语句加入表达式
        case 后面接
                常量                      通常大写,若小写的常量需要使用反括号
                变量 case  x if(x%2==0)  必须以小写字母开头
                类型 case x:String            类型多是大写  优先于isInstanceof asInstanceof
                数组、元组、列表 case()    Array
                序列模式 Seq        unapplySeq
                可变参数类表的匹配
                正则表达式的匹配
                样例类的匹配-构造函数unapply-样例类case class等
                变量绑定模式@
2.模式匹配的原理
    匹配发生在运行期,Java虚拟机中的泛型类型信息会被擦除,所以不能用类型来匹配特定的Map类型
    变量是如何绑定到列表或者元组的不同部分--
析构--访问复杂结构的各组成部分--
提取器机制 extractor --带有从对象中提取值的unapply或者unapplySeq方法-提取器就是一个带有 unapply 方法的对象
    Array伴生对象
    正则表达式--正则表达式对象
    unapply方法会将对象分解为用以匹配模式的片段,而apply则是为了提供一个把他们组合回去的选择
    每个样例类都自动具备apply和unapply方法
    提取任意长度值的序列-unapplySeq

隐式转换

Scala中会默认隐式的引用到每个程序中-import Predef._    // 通过Predef对象自动加载一些隐式对象
隐式参数和隐式转换
    隐式转换用于类型之间做转换 implicit conversion function

隐式转换规则--显性定义规则-作用域规则--无歧义规则
    当表达式类型与预期类型不同时
    当对象访问一个不存在的成员时
    当对象调用某个方法,而该方法的参数声明与传入参数不匹配时

定义隐式转换函数
    implicit def int2float(x:Int) :Float = x.toFloat
     隐式转换与函数名无关--只与函数签名- 输入参数类型和返回值类型有关
隐式类-隐式对象-隐式参数-隐式值
隐式参数适用的场景
    执行上下文
    功能控制
    限定可用实例
    隐式证据-- 绕开类型擦除带来的限制
隐式参数遵循的规则
    只有最后一个参数列表中允许出现隐式参数
    implicit 关键字必须出现在参数列表的最左边,且只能出现一次

类型系统 Type System

类型--类型参数 -- 类型变量
类型参数- 
    01.类型泛化-- 带有一个或者多个类型参数的类是泛型
        泛型类-泛型函数
    02.对类型做出限制 类型界定(上界、下界、上下文界定、类型约束),
                                                类型约束: =:=  <:<  =>
        变异声明 +  - 
            协变表示某个泛型类的子类型关系 和参数T方向一致 -- 表示输出的类型参数 + 
            逆变表示方向相反        -- 表示输入的类型参数
     03.类型通配符

高级类型
        参数化类型- 抽象类型-结构化类型
        单例类型-类型投影-类型别名- 结构类型-存在类型-抽象类型-高等 Higher-Kinded类型
             高阶类型的使用中,有三种变化,分别是顺变、协变及逆变
        高阶类型是接受其他参数用来构造新类型的,所以又称为“类型构造器
        路径相关类型-- path-dependent type

类型推断
  Scala采用的局部的(local)、基于流的(flow-based)类型推断

附录:

    中置表达式-- infix- 中置操作符
        操作符: 优先级和结合性(顺序)
                        一元操作符、二元操作符、三元操作符
                        前置操作符、中置操作符、后置操作符
                        功能: 赋值操作符
        1 to 10  ==  1.to(10)
        方法
            apply   : 构造对象不用显示使用new
            unapply
            update
    2. match case 
      catch(){ case e:Exception}
     3.
        Predef提供经常使用函数 println()
        Predef对象定义了经常使用的隐式转换--一些隐式转换规则
        Predef 定义了若干的类型以及类型别名
        函数的签名(方法签名)是用来定义一个函数传入参数的类型,顺序和数量的

参考

Scala常见特性小结 http://ytluck.github.io/program/my-program-post-20.html

blogroll

social