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

时间:2017-06-20 19:11:54

标签: scala ammonite

我在ammonite shell中编写了以下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类指定命名空间。由于它是一个脚本,我想将所有内容保存在同一个文件中。

1 个答案:

答案 0 :(得分: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"))