【问题标题】:Create a class with a package in a Scala Ammonite Script在 Scala Ammonite 脚本中创建一个带有包的类
【发布时间】:2017-11-23 11:33:39
【问题描述】:

我在 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 {

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

【问题讨论】:

    标签: scala ammonite


    【解决方案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"))
    

    【讨论】:

    • 这种技术没问题,但是我必须将完整的类名传递给 Jython,还是根据完整的类名动态创建一个对象?
    猜你喜欢
    • 2021-05-23
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2019-01-06
    • 2019-12-24
    • 2017-10-18
    • 2017-08-24
    相关资源
    最近更新 更多