包对象

作者: 达微 | 来源:发表于2019-05-09 15:39 被阅读4次

包对象
Scala提供包对象作为在整个包中共享的方便容器。

包对象可以包含任意定义,而不仅仅是变量和方法定义。例如,它们经常用于保存包范围类型的别名和隐式转换。包对象甚至可以继承Scala类和特征。

按照惯例,包对象的源代码通常放在一个名为的源文件中package.scala。

每个包都允许有一个包对象。放置在包对象中的任何定义都被视为包本身的成员。

见下面的例子。首先假设包中有一个类Fruit和三个Fruit对象 gardening.fruits:

// in file gardening/fruits/Fruit.scala
package gardening.fruits

case class Fruit(name: String, color: String)
object Apple extends Fruit("Apple", "green")
object Plum extends Fruit("Plum", "blue")
object Banana extends Fruit("Banana", "yellow")

现在假设您要将变量planted和方法showFruit直接放入包中gardening.fruits。这是如何做到的:

// in file gardening/fruits/package.scala
package gardening
package object fruits {
  val planted = List(Apple, Plum, Banana)
  def showFruit(fruit: Fruit): Unit = {
    println(s"${fruit.name}s are ${fruit.color}")
  }
}

作为使用网站的外观,下面的对象一个例子PrintPlanted进口planted,并showFruit在它到底进口类的方法相同Fruit,使用上包gardening.fruits通配符导入:

// in file PrintPlanted.scala
import gardening.fruits._
object PrintPlanted {
  def main(args: Array[String]): Unit = {
    for (fruit <- fruits.planted) {
      showFruit(fruit)
    }
  }
}

包对象与其他对象类似,这意味着您可以使用继承来构建它们。例如,人们可能会混合几个特征:

package object fruits extends FruitAliases with FruitHelpers {
  // helpers and variables follows here
}

请注意,方法重载在包对象中不起作用。

https://docs.scala-lang.org/tour/package-objects.html

相关文章

  • 包对象

    包对象Scala提供包对象作为在整个包中共享的方便容器。 包对象可以包含任意定义,而不仅仅是变量和方法定义。例如,...

  • 函数对象和闭包

    函数对象和闭包 一) 函数对象 示例: 二)函数嵌套 三)闭包函数

  • 函数储存状态

    一个取钱程序 “闭包是穷人的对象”,“对象是穷人的闭包”

  • kotlin let、run、with、also、apply函数

    一、let 当前对象:it返回值:闭包 二、run 当前对象:this或省略返回值:闭包 三、also 当前对象:...

  • 安装Vuex

    安装vuex依赖包: 导入vuex包 创建 store 对象 vuex实例挂载到vue对象上 来源:https:/...

  • 闭包和面向对象设计

    闭包: 面向对象:

  • time包与datetime包

    time包的struct_time对象无法作差 datetime包的datetime对象可以作差,得到timede...

  • 闭包与面向对象设计

    闭包 面向对象 或者

  • 一组超适合拿去脱单的表情包

    一套非常火爆的收对象表情包,一组收对象收旧对象表情包送给大家。这是一组超适合拿去脱单的表情包哦,喜欢的话就快快收藏...

  • java反射

    一切皆对象 java中所有的东西都有对应的对象,包括包,类,方法,字段,注解,一切皆对象。包package对应的类...

网友评论

    本文标题:包对象

    本文链接:https://www.haomeiwen.com/subject/hrgwoqtx.html