【发布时间】: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