El principal objetivo de un paquete es mantener los archivos modularizados y fáciles de mantener. Por lo tanto, mantenemos los archivos del proyecto en varias carpetas o directorios diferentes según el espacio de nombres creado, pero a veces queremos que algunas variables, definiciones, clases u objetos sean accesibles para todo el paquete. Pero no es posible mantener definiciones, variables de datos y alias de tipo directamente en un paquete. Para hacerlo, tenemos un objeto de paquete, de modo que los datos comunes pueden estar en el nivel superior del paquete. Los objetos de paquete se introdujeron en Scala versión 2.8.
Sintaxis:
package projectx package src package main object `package` { // using backticks val x // members }
o la forma estándar de hacerlo es.
package src package object main { val x // members }
En la sintaxis anterior, todos los miembros del objeto del paquete están disponibles para toda la clase en el paquete projectx.src.main y este archivo se guardaría como paquete.scala en el directorio/paquete «principal», que también corresponde al nombre del paquete. .
Ejemplo:
Tengamos un objeto de paquete GFG con la ruta de la siguiente manera: –
File Path: ../src/language/GFG/package.scala
package language package object GFG { val fees = "fees" val tax = "tax" }
Otro archivo GFG.scala con el método principal.
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) } }
Explicación:
Como podemos ver, tenemos impuestos y tarifas directamente disponibles para usar porque GFG.scala y package.scala están al mismo nivel.
+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" }
Producción:
scala csharp taxfees
- Pueden extender otras clases o mezclar rasgos.
package object main extends demovars { val x = a // from demovars val y = b // from demovars // members }
- Son un buen lugar para almacenar implícitos en lugar de definirlos en objetos complementarios .
- Usando objetos de paquete podemos acortar nuestro código evitando el uso de importaciones.
package object main { val x = demovars.a // from demovars val y = demovars.b // from demovars // members }
- Cada paquete puede tener solo un objeto de paquete con el directorio de directorio/nombre de paquete correspondiente.
+src +eatables +food.scala +package.scala // package object for eatables folder +drinkables +drinks.scala +package.scala // package object for drinkable folder