scala高级

**

  • .Mixin–混编

当某个特质被用于组合类时,被称为混入;
Java:当一个类有接口的时候称为混入;
trait可以继承自类;
类实现接口在java中使用(implements),在scala中使用with;
一个类只能有一个父类但是可以有多个混入(分别使用关键字extend和with)
混入和某个父类可能有相同的父类

  • 高阶函数
    -高阶函数是指使用其他函数作为参数、或者返回一个函数作为结果的函数。在Scala中函数是“一等公民”,所以允许定义高阶函数。这里的术语可能有点让人困惑,我们约定,使用函数值作为参数,或者返回值为函数值的“函数”和“方法”,均称之为“高阶函数”。
    方法的参数和返回值在java中是一个类型(基本数据类型和引用类型),类型可以再增加一个方法;如果java支持此语法,那scala就木有必要学
    方法的参数和返回值可以是方法;
    使用高阶函数的一个原因是减少冗余的代码
    返回函数的函数:方法的返回值也是函数;

  • 柯里化–多参数列表
    方法可以定义多个参数列表,当使用较少的参数列表调用多参数列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数。这被称为柯里化。

  • 案例类
    案例类非常适合用于不可变的数据
    不能使用new来创建对象,这是因为案例类有一个默认的apply方法来负责对象的创建。
    使用==比较,可以直接比较堆和栈的上的值
    当你创建包含参数的案例类时,这些参数是公开(public)的val,不能为案例类的属性重新赋值
    拷贝:浅拷贝,只拷贝类的属性中(基本数据类型);深拷贝(不但拷贝基本数据类型还要拷贝引用数据类型)
    密封类:
    特质(trait)和类(class)可以用sealed标记为密封的,这意味着其所有子类都必须与之定义在相同文件中,从而保证所有子类型都是已知的。

  • 提取器对象
    提取器对象是一个包含有 unapply 方法的单例对象。apply 方法就像一个构造器,接受参数然后创建一个实例对象,反之 unapply 方法接受一个实例对象然后返回最初创建它所用的参数。提取器常用在模式匹配和偏函数中。
    unapply 方法的返回值应当符合下面的某一条
    如果只是用来判断真假,可以返回一个 Boolean 类型的值。例如 case even()。
    如果只是用来提取单个 T 类型的值,可以返回 Option[T]。(Option===java中的枚举)
    如果你想要提取多个值,类型分别为 T1,…,Tn,可以把它们放在一个可选的元组中 Option[(T1,…,Tn)]。
    有时,要提取的值的数量不是固定的,因此我们想根据输入来返回随机数量的值。这种情况下,你可以用 unapplySeq 方法来定义提取器,此方法返回 Option[Seq[T]]。常见的例子有,用 case List(x, y, z) => 来解构一个列表 List,以及用一个正则表达式 Regex 来分解一个字符串 String,例如 case r(name, remainingFields @ _*) =>。

  • .For—yield

Scala 提供一个轻量级的标记方式用来表示 序列推导。推导使用形式为 for (enumerators) yield e 的 for 表达式,此处 enumerators 指一组以分号分隔的枚举器。一个 enumerator 要么是一个产生新变量的生成器,要么是一个过滤器。for 表达式在枚举器产生的每一次绑定中都会计算 e 值,并在循环结束后返回这些值组成的序列。

  • 泛型
    在java中定义的时候使用的<>, 这里面的字母随便写,一般是一个字母,
    泛型类指可以接受类型参数的类。泛型类在集合类中被广泛使用。使用的是[ ]
    一个惯例是使用字母 A 作为参数标识符,当然你可以使用任何参数名称。
    型变:
    [+A]:协变;在定义的时候使用的是+a,在使用的时候定义的是一个父类,验证的时候传入子类也木有问题;
    [-A]:逆变:在定义的时候使用的是-a,在使用的时候定义的是一个子类,验证的时候传入父类也木有问题;
    [A]:不变;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值