本文概述
- Scala trait用法示例
- Scala
句法 :
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 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用法的详细指南
推荐阅读
- C++ std::max怎么用(用法详细介绍)
- 高级数据结构(B+树入门介绍-B+树实现原理)
- McAfee面试体验| SDE-2(4.5年经验)
- C++标准模板库(STL)如何使用multimap(用法示例)
- 时钟问题(找出时钟指针之间的角度)
- 优盘不显示,教您优盘不显示怎样办
- 磁盘被写保护怎样解除,教您如何处理U盘磁盘被写保护
- 安装系统 U盘装系统,教您怎样用U盘重装系统
- u盾密码忘了怎样办,教您u盾密码忘了怎样办