【问题标题】:Scala: package object v.s. singleton object within a packageScala:包对象与包中的单例对象
【发布时间】:2018-08-31 17:47:28
【问题描述】:

我想在 scala 的一个库中对一组类似的函数进行分组。 这是我在其他地方看到的两种方法。我想了解 两者的区别。

包中定义的单例对象

// src/main/scala/com/example/toplevel/functions.scala
package com.example.toplevel

object functions {
  def foo: Unit = { ... }
  def bar: Unit = { ... }
}

包对象

// src/main/scala/com/example/toplevel/package.scala
package com.example.toplevel

package object functions {
  def foo: Unit = { ... }
  def bar: Unit = { ... }
}

比较

据我所知,第一种方法需要显式导入 只要你想使用它的功能,functions 对象。虽然包对象方法允许包functions 中的任何内容访问这些方法,而无需导入它们。

也就是说,com.example.toplevel.functions.MyClass 可以隐式访问com.example.toplevel.functions.foo。

我的理解正确吗?

如果com.example.toplevel.functions 中没有定义类, 似乎这些方法是等效的,这是正确的吗?

【问题讨论】:

  • 是的,你的理解是正确的。您的包对象中定义的任何内容都将可用,而无需导入。如果使用对象,即使在同一个包中也必须导入它。

标签: scala library-design


【解决方案1】:

由终端寒冷在评论中回答:

是的,你的理解是正确的。包中定义的任何内容 无需导入即可使用对象。如果你使用一个 对象,即使在同一个包中,您也必须导入它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-21
    • 2017-01-10
    • 1970-01-01
    • 2022-06-23
    • 2012-05-18
    • 2017-01-17
    • 2017-04-15
    • 1970-01-01
    相关资源
    最近更新 更多