使用 Scala Ammonite 脚本中的包创建 class

Create a class with a package in a Scala Ammonite Script

我用 ammonite 编写了以下 scala 脚本 shell

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

case class Person(name: String)

这可以编译并且工作正常。但是我需要 class 人在一个名为 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 {

我想知道如何为我的案例指定命名空间 class。由于它是一个脚本,我想将所有内容保存在同一个文件中。

由于脚本内容被 Ammonite 包装在一个对象中(具有 top-level 语句和定义),您不能使用 package。但是您可以通过在嵌套对象中定义它来为您的 class 命名空间:

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"))