Scala:打包对象与包中的单例对象

时间:2018-08-31 17:47:28

标签: scala library-design

我想在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中未定义任何类, 看来这些方法是等效的,对吗?

1 个答案:

答案 0 :(得分:0)

最终在评论中冷落:

  

是的,您的理解是正确的。您的包裹中定义的所有内容   对象将可用,而无需导入。如果您使用   对象,即使在同一包中,也必须将其导入。