美文网首页
Scala类型系统

Scala类型系统

作者: 星辰fml | 来源:发表于2019-04-19 06:25 被阅读0次

简介

Scala是一门多范式的编程语言,设计初衷是要整合面向对象编程和函数式编程的各种特性,Scala代码会被编译成.class并运行于JVM中。
Scala中存在非常复杂的类型系统,复杂程度不亚于C++。

型变

Scala中存在3中型变:协变(+)逆变(-)不变

  • 协变:必须的数据类型为A或A的父类型,(+)可以想象成向上,积极的,可以传递A或及其以上类型
  • 逆变:必须的数据类型为A或A的子类型,(-)可以想象成向下,消极的,可以传递A或及其以下类型
    Scala中方法参数是逆变的,返回值是协变的

界定

Scala中存在3种界定:下界上界视图界定

  • 下界(A >: B): 必须的数据类型为B或B的父类型
  • 上界(A <: B): 必须的数据类型为B或B的子类型
  • 视图界定(A <% B): 上下文中必须存在一个从A到B的隐式类型转换

类型约束

Scala中存在几种类型约束: =:=<:<<%<

  • =:= 表示 A 必须是 B 类型
  • <:< 表示 A 必须是B的子类型 (类似于简单类型约束 <:)
  • <%< 表示 A 必须是可视化为 B类型, 可能通过隐式转换 (类似与简单类型约束 <%)

多重界定

  • T:M:K 意味着在作用域中必须存在M[T]、K[T]类型的隐式值
  • T<%M<%K 意味着在作用域中必须存在T到M、T到K的隐式转换
  • K>:T<:M 意味着M是T类型的超类,K也是T类型的超类

在Scala中推荐将不带参数并且方法没有副作用(方法内部不会对外部的状态进行修改)的方法,在调用时省略括号。

Scala中缺省的泛型是非协变的。

Scala中的方法和函数属于两个不同的概念,方法无法作为参数进行传递,也无法赋值给变量,但是函数可以,但可以用_(下划线)来将方法转换为函数。

相关文章

  • Essential Scala: Literals

    Scala对象系统 总体上,Scala对象系统可分为两类: 引用类型 值类型 引用类型 AnyRef的子类 使用n...

  • Scala类型系统

    简介 Scala是一门多范式的编程语言,设计初衷是要整合面向对象编程和函数式编程的各种特性,Scala代码会被编译...

  • Scala 类型系统

    1.在scala泛型中获取其 Class[T] 需求:获取一个泛型 T 的 class 类型的 Class[T],...

  • Scala 类型系统(1)

    协变逆变引入原因 协变和逆变主要是用来解决参数化类型的泛化问题。我的理解是解决Scala高阶函数参数引入。 定义协...

  • Scala类型推导

    Scala类型推导 之剑 2016.5.1 00:38:12 类型系统 什么是静态类型?为什么它们很有用? 根据P...

  • -6- 类型层次结构

    [参考link] Scala类型层次结构 与Java不同,Scala中没有原生类型。Scala中的所有数据类型都是...

  • Scala相关文章索引(2)

    基本常识 scala编程第17章学习笔记(1)——集合类型 scala Map类型笔记 scala代码风格指南--...

  • 快学Scala读书笔记

    scala不刻意区分原生类型和引用类型 scala单参数方法可以用运算符形式调用,例如: scala没有提供"++...

  • -7- scala数据类型

    [参考link] Scala 布尔类型 布尔类型限于文本true或文本false,如下面的示例所示: Scala ...

  • 【Scala类型系统】自身类型(self type)引用

    定义 特质可以要求混入它的类扩展自另一个类型,但是当使用自身类型(self type)的声明来定义特质时(this...

网友评论

      本文标题:Scala类型系统

      本文链接:https://www.haomeiwen.com/subject/tfjfgqtx.html