使用Scala Ammonite脚本中的包创建一个类

使用Scala Ammonite脚本中的包创建一个类,scala,ammonite,Scala,Ammonite,我在ammonite shell中编写了以下scala脚本 #!/usr/bin/env amm @main def main() = { val p = Person("foo") } case class Person(name: String) 这可以编译并运行良好。但是我需要班级人员在一个名为com.foo 如果我尝试 #!/usr/bin/env amm @main def main() = { val p = Person("foo") } package co

我在ammonite shell中编写了以下scala脚本

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

case class Person(name: String)
这可以编译并运行良好。但是我需要班级人员在一个名为
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类指定名称空间。因为它是一个脚本,所以我希望将所有内容都保存在同一个文件中。

因为脚本内容由Ammonite包装在一个对象中(要有顶级语句和定义),所以不能使用
包。但您可以通过在嵌套对象中定义类来命名类的名称空间:

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

@main
def main() = {
  val p = com.foo.Person("foo")
}
如果稍后将在另一个脚本中导入此脚本,则还将使用此命名空间(不带包装):


由于脚本内容由Ammonite包装在对象中(以具有顶级语句和定义),因此不能使用
package
。但您可以通过在嵌套对象中定义类来命名类的名称空间:

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

@main
def main() = {
  val p = com.foo.Person("foo")
}
如果稍后将在另一个脚本中导入此脚本,则还将使用此命名空间(不带包装):