Создайте класс с пакетом в сценарии Scala Ammonite.

Я написал следующий скрипт scala в оболочке аммонита

#!/usr/bin/env amm
@main
def main() = {
    val p = Person("foo")
}

case class Person(name: String)

Это компилируется и работает нормально. Но мне нужно, чтобы класс Person находился в пакете с именем com.foo

Если я попытаюсь

#!/usr/bin/env amm
@main
def main() = {
    val p = Person("foo")
}

package com.foo {
  case class Person(name: String)
}

Теперь я получаю синтаксическую ошибку, которая похожа на

Syntax Error: End:7:1 ..."package co"
package com.foo {

Интересно, как я могу указать пространство имен для моего класса case. Поскольку это сценарий, я хотел бы сохранить все в одном файле.


person Knows Not Much    schedule 20.06.2017    source источник


Ответы (1)


Поскольку содержимое скрипта заключено Ammonite в объект (чтобы иметь операторы и определения верхнего уровня), вы не можете использовать package. Но вы можете использовать пространство имен для своего класса, определив его во вложенном объекте:

object com {
  object foo {
    case class Person(name: String)
  }
}

@main
def main() = {
  val p = com.foo.Person("foo")
}

Если вы позже импортируете этот скрипт в другой, вы также будете использовать это пространство имен (без упаковки):

import $file.firstScript, firstScript._

println(com.foo.Person("Bob"))
person laughedelic    schedule 17.03.2018