`
bit1129
  • 浏览: 1067588 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Scala十九】关于function入参类型逆变,返回结果协变

 
阅读更多
class CSuper {

}

class C extends CSuper {

}

class C2 extends  CSuper {

}

class CSub  extends  C {

}

object Scala8 {

  /***
    * 
    * @return
    */
    val func1 : C=>C = (c : CSuper) => new CSub
    val func2 : C=>C = (c : C) => new C
    //val func3: C=>C = (c: CSub) => new C
    //val fun4:C=>C = (c:C2)=>new C
     def main(args : Array[String]): Unit = {
     }
}

 

因为func1的返回值是C=>C,那么func1()(XXX),那么XXX必须是C或者C的子类型,    C或者C的子类型必然可以转换为CSuper,就是说,XXX对象可以作为(c:CSuper)=>new CStub的入参。

 

但是XXX对象不能转型为为CSub或者C2,所以func3,func4是有编译错误的

 

fun1,func2都是函数字面量,该函数字面量的类型签名是Function2[-C,+C],即函数的(唯一)参数是逆变,而返回值是协变。

 

val func1 : C=>C = (c : CSuper) => new CSub

如上定义,func1的声明类型是C=>C,实际定义的类型是 (c : CSuper) => new CSub

 

分享到:
评论

相关推荐

    function programming in scala 英文原版 scala函数式编程

    英文原版 scala函数式编程 function programming in scala

    scala3 scala3 scala3 scala3 scala3

    Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...

    scala sdk scala-2.12.3

    Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...

    Programming In Scala 中文版及英文版

    15. **类型系统高级特性**:包括类型参数的上下界、协变和逆变、路径依赖类型等,使得Scala能够实现复杂的类型系统设计。 总之,《Programming In Scala》中文版和英文版覆盖了Scala语言的核心概念和高级特性,无论...

    Scala语言分析报告

    它还引入了型变注释,使得类型继承结构更加灵活,能够处理协变和逆变。此外,Scala支持上限和下限类型边界,使得类型继承结构更精确,同时也支持类和抽象类型的对象成员,复合类型以及显式自类型和视图绑定,增强了...

    Scala编程详解 第19讲-Scala编程详解:类型参数 共13页.pptx

    - 协变和逆变:类型参数可以标记为协变covariant(+T)或逆变contravariant(-T),影响类型参数在多态中的行为。 - Existential Types:用于处理类型参数的“存在”信息,通常在类型系统复杂的情况下使用。 掌握...

    Scala考试题1

    - `Nothing` 是所有类型的子类型,表示没有结果。 8. **Unit 类型**: - 类似于 Java 的 void,表示无返回值的函数。 9. **Option 类型及使用场景**: - Option 用于处理可能缺失的值,避免空指针异常,分为 ...

    快学scala第一章习题答案.doc

    Scala 语言具有一个强大的类型系统,支持多种类型系统概念,如参数多态、协变和逆变等。Scala 语言还提供了许多高级类型系统概念,如类型推断、类型参数等。 十二、Scala 中的集合框架 Scala 语言提供了一个强大的...

    scala入门精华讲义

    3. 变量与常量:Scala有val(不可变)和var(可变)两种变量类型。`val`定义的变量一旦赋值后不能改变,而`var`则可以。 4. 数据类型:Scala有基本类型(如Int, Double, String等)和引用类型。基本类型的值直接...

    scala + mybatis 数据库查询

    - Scala的静态类型系统和强大的表达能力使其成为构建复杂应用程序的良好选择,而MyBatis以其灵活性和易用性在Java世界中占有一席之地。通过使用Scala的Java互操作性,我们可以无缝地在Scala中使用MyBatis。 - 集成...

    scala教材.docx

    函数的参数需要指定类型,返回类型则可以由类型推断得出。Scala 允许无参函数省略括号,如 `def three() = 1 + 2`。 4. **匿名函数**:不使用名称的函数称为匿名函数,可以写作 `(x: Int) => x + 1`。匿名函数可以...

    A Brief Introduction to Scala

    Scala提供了多种集合类型,包括不可变集合和可变集合。例如,可以定义一个空的可变整数列表: ```scala var li = List[Int]() ``` 4. **类型系统示例**: Scala类型系统的一个关键特点是它支持类型推断和泛型...

    scala参考手册 必看

    函数类型(Function Types)描述了接受一组参数并返回特定类型的函数。 手册还涉及了命名空间和作用域的规则,这对于理解和避免命名冲突至关重要。此外,它可能还包括了表达式、控制流、类和对象、继承、模态和权限...

    scala学习源代码

    另外,Scala有丰富的集合API,这些集合支持丰富的函数式操作,如map、filter和reduce,它们使数据处理变得简单且易于理解。 Scala的类型系统非常强大。它采用了静态类型,每个值都有其特定的类型,这在编译时就能...

    【学习 Scala】.pdf

    它支持泛型、协变和逆变、类型参数的上下界约束,以及将类别和抽象类型作为对象成员。 4. **复合类型**:Scala允许创建复合类型,比如元组,可以组合多种类型的值。 5. **类型推断**:Scala具有类型推断能力,使得...

    Scala 2.11-API.chm

    Scala的特质(Trait)是实现多继承和行为组合的关键机制,它们可以被类混合入(mix-in),以扩展其功能。例如,`Serializable` 特质表示一个对象可以被序列化,这是跨进程通信和持久化数据时常用的功能。 在函数式...

    最好的scala学习 课件

    最后,"Scala进阶之路-part05-高级语法.pdf"将探讨Scala的一些高级特性,如类型推断、高阶函数、匿名函数、 currying、偏函数、类型系统(如类型别名、类型参数和类型成员)以及元编程。这部分内容将提升你的编程...

    scala实战高清讲解

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发和大数据分析方面表现出色。"Scala实战高清讲解"这本书是学习Scala的宝贵资源,尤其对于那些希望深入理解并提升Scala技能的...

    Scala的List类方法整合

    ### Scala的List类方法整合 在Scala编程语言中,`List` 类是处理有序集合的一种常见方式。本文将详细介绍 `List` 类中的多种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def + (elem: A): List...

Global site tag (gtag.js) - Google Analytics