📜  斯卡拉 |封装对象

📅  最后修改于: 2022-05-13 01:54:57.122000             🧑  作者: Mango

斯卡拉 |封装对象


包的主要目标是保持文件模块化和易于维护。所以我们根据创建的命名空间将项目文件保存在几个不同的文件夹或目录中,但有时我们希望某些变量、定义、类或对象可以被整个包访问。但不可能将定义、数据变量和类型别名直接保存在包中。为此,我们有包对象,以便公共数据可以位于包的顶层。包对象是在 scala 版本 2.8 中引入的。
句法:

package projectx
package src
package main
object `package`
{
  // using backticks
  val x
  // members
}

或标准的方法是。

package src
package object main
{
  val x
  // members
}

在上述语法中,包对象的所有成员对 projectx.src.main 包中的所有类都可用,并且该文件将保存为 package.scala 在目录/包“main”中,它也对应于包名称.
例子:
让我们有一个包对象 GFG,其路径如下:-

File Path: ../src/language/GFG/package.scala
package language
package object GFG 
{
  val fees = "fees"
  val tax = "tax"
}

另一个包含主要方法的文件 GFG.scala。

File Path: ../src/language/GFG/GFG.scala
package language.GFG
  
object GFG
{
  val scala = "scala"
  val java = "java"
  val csharp = "csharp"
}
  
object demo
{
  def main( args : Array[String])
  {
    println(GFG.scala)
    println(GFG.csharp)
    var totalfees= tax + fees
    println(totalfees)
  }
}

解释:
正如我们所看到的,我们可以直接使用税费,因为 GFG.scala 和 package.scala 处于同一级别。

+src
   +language
        +GFG.scala
        +package.scala
// Scala program of package object
  
// package eatables.food
  
// Object created
object GFG
{
    val scala = "scala"
    val java = "java"
    val csharp = "csharp"
}
  
// Object created
object demo
{
    // Driver code
    def main( args : Array[String])
    {
        println(GFG.scala)
        println(GFG.csharp)
        var totalfees = tax + fees
        println(totalfees)
    }
}
  
// package object created
object `package`
{
    val fees= "fees"
    val tax= "tax"
}

输出:

scala
csharp
taxfees
包装对象 要点
  • 他们可以扩展其他类和/或混合特征。
    package object main extends demovars
    {
      val x = a // from demovars
      val y = b // from demovars
      // members
    }
    
  • 它们是存储隐式而不是在伴随对象中定义它们的好地方。
  • 使用包对象,我们可以通过避免使用导入来缩短我们的代码。
    package object main
    {
      val x = demovars.a // from demovars
      val y = demovars.b // from demovars
      // members
    }
    
  • 每个包只允许有一个包对象,对应的目录目录/包名。
    +src
       +eatables
            +food.scala
            +package.scala // package object for eatables folder
      +drinkables
            +drinks.scala
            +package.scala // package object for drinkable folder