`
agile_boy
  • 浏览: 556615 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

处理Scala的类型擦除问题

    博客分类:
  • fp
阅读更多
  在Scala中,你如果使用了泛型的话,那你在Pattern Matching的时候要注意了,因为会有类型擦除的问题:non variable type-argument String in type pattern is unchecked since it is eliminated by erasure,这是由于JVM导致的。
  不过Scala也提供了Manifest这样的类来处理这样问题,详细请参考:How do I get around type erasure on Scala? Or, why can’t I get the type parameter of my collections?
  这里要说得是Actor导致的Pattern Matching问题,因为在act中你没有处理Manifest的机会,因此,在Actor中常用的方法是把你的泛型数据通过case class进行包装,就可以比较优雅的解决问题了:
case  class RangeNodes(nodes:Array[NodeTuple])
....
receiveWithin(10000) {
     case RangeNodes(ipSet) => nodes ++= ipSet
 }
分享到:
评论

相关推荐

    为Java虚拟机编译Scala(Michel Schinz)Compiling Scala for the Java Virtual Machine (Michel Schinz)

    此外,类型擦除会使得在运行时进行某些类型检查和操作变得复杂,因此,Scala编译器需要在编译阶段处理这些问题。 ### 编译运行时类型 Scala编译器在处理运行时类型的过程中,会编译类型表达式、多态方法和类,以及...

    scala-2.11.8.zip

    7. **泛型**:Scala的泛型系统比Java的更为强大,可以更好地处理类型安全和类型擦除。 8. **对象和类的统一**:Scala没有单独的接口概念,而是将类和接口的概念统一,使得面向对象设计更加灵活。 9. **DSL设计**:...

    Scala语言规范版本:2.7

    类型之间的关系、易变类型和类型擦除等高级特性也在规范中有所体现。 基本声明与定义涵盖了值声明与定义、变量声明与定义、类型声明与类型别名、类型参数等方面。此外,函数声明与定义部分介绍了Scala中函数的不同...

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

    - Manifest Context Bounds:结合Manifest(类型信息)与Context Bounds,主要用于类型擦除场景,提供编译时的类型信息,但现在已由TypeTag取代。 - 协变和逆变:类型参数可以标记为协变covariant(+T)或逆变...

    scala语言规范

    - **类型擦除**:Scala 在编译期间执行类型检查,但在运行时,泛型类型的类型信息会被擦除,遵循 Java 的类型擦除原则。 4. **声明与定义** - **值声明与定义**:`val` 用于声明不可变值,`var` 用于声明可变变量...

    Scala语言规范PDF版

    Scala的易变类型和类型擦除概念解释了在运行时,类型信息如何被处理以及如何管理类型安全和性能之间的平衡。类型擦除是Java虚拟机(JVM)所采用的一种机制,它在编译期间将泛型类型信息擦除,而Scala需要在此基础上...

    Scala语言规范(书签版)

    其中,类型映射、参数化类型、元组类型、标注类型、复合类型、中缀类型、函数类型以及既存类型等构成了Scala类型系统的基础。类型擦除则是类型转换中的一个过程,是指在运行时不保留泛型类型信息。 3. 声明与定义:...

    Scala语言参考 PDF

    此外,Scala的类型系统还包括类型擦除和类型成员,这些特性使得在编译时就能捕获许多潜在的错误,提高了代码的健壮性。 总的来说,Scala语言的灵活性和强大功能使其成为开发大规模、复杂应用的理想选择,尤其适合...

    Scala面试问题:可用于与潜在候选人面试的有用的Scala相关问题列表

    - 请解释Scala中的类型擦除以及其与Java的区别。 7. **元编程** - 什么是Scala的反射(Reflection)?如何在运行时检查或修改对象的类型? - implicits是如何工作的?它们在Scala中的主要用途是什么? - 怎么...

    Scala语言规范_最新版.pdf

    特别指出的是Scala中的类型擦除概念和易变类型。 4. 基本声明与定义:讲解了值声明、变量声明、类型声明与类型别名、类型参数、差异标注、函数声明与定义等。其中,函数定义包含了叫名参数、重复参数、过程、方法...

    大数据课程-Scala编程基础-5.Scala模式匹配_lk_edit.ppt

    需要注意的是,由于泛型类型擦除,直接匹配泛型列表可能无法得到具体的类型信息,但数组是个例外,它可以保留其泛型类型。 最后,Scala的样例类和隐式函数是模式匹配中常用的特性。样例类(Case Class)提供了方便...

    Scala语言规范

    类型擦除是Scala编译器在运行时忽略类型信息的过程,这对于实现通用类型支持非常重要。 #### 四、基本声明与定义 - **4.1 值声明与定义** - 声明变量使用`val`关键字,定义变量使用`var`关键字。 - **4.2 变量...

    英文版ScalaReference.pdf

    **3.7 类型擦除** Scala编译器为了兼容Java虚拟机,会擦除所有泛型信息,保留类型的基本结构。 #### 四、声明与定义 **4.1 值声明与定义** 用于定义不可变值。 **4.2 变量声明与定义** 用于定义可变变量。 **4.3...

    Scala游乐场2202

    它还支持类型擦除和类型成员,允许更精细的类型控制。 8. ** Actors和Concurrent Programming**:Scala通过Akka库提供了强大的并发编程模型,Actors是一种轻量级的并发实体,可以异步接收和处理消息,简化了多线程...

    learning_scala:通过学习Scala中的示例进行工作

    它还支持类型擦除,与Java的泛型类似,但在编译时进行类型检查,运行时没有类型信息。 隐式转换是Scala的一个特色,它允许在合适的情况下自动调用特定的方法将一个类型转换为另一个类型。这在处理第三方库时特别...

    scala-bootcamp-homework

    类型系统支持泛型、类型别名、类型成员和类型参数化,以及类型擦除等特性。 7. **并发处理**: Scala 通过 Actors 和 Futures 提供了对并发和异步编程的支持,可以方便地构建分布式、多线程的应用程序。 8. **Akka ...

    minitt:MiniTT在Scala中的实现

    在实现MiniTT时,可能会遇到类型系统的局限性,如类型擦除和类型反射能力的不足。此外,Scala的类型系统在某些情况下可能不够强大,无法表达MiniTT的所有复杂性。 **结论** 在Scala中实现MiniTT是一项挑战,但也是...

    scalabook_v3

    2. **模式匹配升级**:Scala v3中,模式匹配功能得到了强化,可以更好地处理枚举类型、case类和sealed类,减少了类型擦除带来的问题,并允许在模式匹配中使用更多的表达式。 3. **更好的错误消息**:为了提升开发...

    scala-impatient-notes

    1. 泛型:Scala的泛型是类型擦除的,但支持类型约束和类型推断,提供了一种强大的类型安全机制。 2. 类型别名:使用`type`关键字可以为已有的类型定义别名,提高代码可读性。 3. 值类型与引用类型:Scala有八种...

    多态:Scala中的多态值

    存在性类型通常与类型擦除有关,是Scala中实现泛型的一种方式。 3. 普遍量化类型 普遍量化类型(Universally Quantified Types)是另一种表达多态的方式,通常出现在类型类(Type Classes)的定义中。例如,我们...

Global site tag (gtag.js) - Google Analytics