1

我在菊石外壳中编写了以下 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 {

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

4

1 回答 1

2

由于脚本内容由 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"))
于 2018-03-17T04:42:54.717 回答