Scala: объект пакета v.s. одиночный объект в пакете - PullRequest
0 голосов
/ 31 августа 2018

Я хочу сгруппировать набор похожих функций в библиотеке в Scala. Вот два подхода, которые я видел в другом месте. Я хочу понять различия между ними.

Объект Singleton, определенный в пакете

// 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 неявно.

Правильно ли мое понимание?

Если в * 1021 не определены классы, кажется, что подходы были бы эквивалентны, это правильно?

1 Ответ

0 голосов
/ 12 января 2019

Отвечает за окончательно-chill в комментарии:

Да, ваше понимание верно. Все, что определено в вашей упаковке Объект будет доступен без импорта. Если вы используете объект, вам придется импортировать его даже в пределах одного пакета.

...