5

我想在 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,那么这些方法似乎是等价的,这是正确的吗?

4

1 回答 1

1

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

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

于 2019-01-12T17:01:48.753 回答