Scala特质trait用法介绍和详细指南

本文概述

  • Scala trait用法示例
  • Scala
Scala trait用法:封装提供详尽检查为我们的应用程序。穷举检查允许检查是否必须在与源文件相同的文件中声明密封特征的所有成员。这意味着必须包括的特征的所有可能的已知成员都已被编译器预先知道。因此, 这给我们带来了防止代码出错的优势。
句法 : 
sealed trait X class A extends X class B extends X class C extends X

详尽检查主要用于/模式匹配在Scala。假设我们有一个密封的特征X和扩展特征X的类。在匹配特征X的子类型时, 我们必须确保必须包含所有已知的子类型。下面的方法会给我们一个警告。尽管我们将获得正确的输出, 但是这可能会导致应用程序中意外的运行时崩溃。
Warning: match may not be exhaustive

def obj(item: X) = item match { case A => // case B => // }

正确的执行方式将是-
def obj(item: X) = item match{ case A => // case B => // case C => // or case _ => //for covering all the remaining cases }

让我们来看看以下程序在文件另存为语言标量:-
【Scala特质trait用法介绍和详细指南】范例: 
Scala trait用法示例
// Scala Program that illustrates sealed trait // language.scala sealed trait Geeks { val article = "not done" } // Class extends trait class Scala extends Geeks { override val article = "scala article" } // Class extends trait class Java extends Geeks { override val article = "java article" } // Class extends trait class Csharp extends Geeks { override val article = "csharp article" } // Creating object object GFG { // Main method def main(args : Array[String]) { val s = new Scala val j = new Java val c = new Csharp println(checkArticle(s)) println(checkArticle(j)) println(checkArticle(c)) }// Defined function def checkArticle(Article : Geeks) : String = Article match { case s : Scala=> s.article case j : Java=> j.article case c : Csharp => c.article //exclusion of < strong> line 45< /strong> would lead to warning } }

输出: 
scala article java article csharp article

Scala trait用法的一些重点
  • 特质的子类型是预先已知的-如果在模式匹配中不包含任何密封的C类子类型, 则会给我们警告。这样的警告告诉你, 由于未处理某些可能的模式, 因此代码可能会产生匹配错误异常。该警告指出了运行时错误的潜在根源, 因此通常在正确设置程序方面是受欢迎的帮助。
     
  • 密封特征只能在与子类型相同的源文件中扩展, 在上面的示例中, 我们还有另一个类python在另一个scala文件中。导入特征极客从语言标量我们将收到如下错误消息。
illegal inheritance from sealed trait bag

import geeks class python extends geeks{ val article="python article"; }

  • 密封类也主要用于枚举–防止非法继承并使用所有子类型, 以避免详尽的匹配警告。
    范例:
Scala
// Scala Program that illustrates sealed trait // By using Enumeration sealed trait card extends Enumeration // Class extends trait case object CLUB extends card // Class extends trait case object HEART extends card // Class extends trait case object DIAMOND extends card // Class extends trait case object SPADE extends card // Creating object object obj 1 { // Main method def main(args : Array[String]) { val card 1 = HEART val card 2 = CLUB val card 3 = SPADE val card 4 = DIAMOND println(checkcard(card 1 )) println(checkcard(card 2 )) println(checkcard(card 3 )) println(checkcard(card 4 )) }// Defined function def checkcard(x : card) : String = x match {case HEART=> "heart" case CLUB=> "club" case SPADE=> "spade" case DIAMOND => "diamond" } }

heart club spade diamond

以上就是Scala trait用法的详细指南

    推荐阅读