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

Scala:包对象与包中的单例对象,scala,library-design,Scala,Library Design,我想在scala的库中对一组类似的函数进行分组。 以下是我在其他地方看到的两种方法。我想了解 两者之间的差异 包中定义的单例对象 //src/main/scala/com/example/toplevel/functions.scala 包com.example.toplevel 目标函数{ def foo:Unit={…} 定义栏:单位={…} } 包对象 //src/main/scala/com/example/toplevel/package.scala 包com.example.top

我想在scala的库中对一组类似的函数进行分组。 以下是我在其他地方看到的两种方法。我想了解 两者之间的差异

包中定义的单例对象
//src/main/scala/com/example/toplevel/functions.scala
包com.example.toplevel
目标函数{
def foo:Unit={…}
定义栏:单位={…}
}
包对象
//src/main/scala/com/example/toplevel/package.scala
包com.example.toplevel
包对象函数{
def foo:Unit={…}
定义栏:单位={…}
}
比较 据我所知,第一种方法需要显式导入 只要您想使用
对象的函数,它就会起作用。而包对象方法允许包
函数
中的任何内容访问这些方法,而无需导入它们

例如,
com.example.toplevel.functions.MyClass
将隐式访问
com.example.toplevel.functions.foo

我的理解正确吗

如果
com.example.toplevel.functions
中未定义任何类,
这两种方法似乎是等效的,对吗?

在评论中被terminally chill反驳道:


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


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