Scala 包对象
包的主要目的是保持文件的模块化和易于维护。因此,我们根据创建的命名空间将项目文件保存在不同的文件夹或目录中,但有时我们希望一些变量、定义、类或对象能够被整个包所访问。但它不可能将定义、数据变量和类型别名直接保存在一个包中。为了做到这一点,我们有了包对象,这样公共数据就可以在包的顶层了。包对象是在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
极客教程