【问题标题】:scala: can't import object from root scopescala:无法从根范围导入对象
【发布时间】:2012-09-27 14:07:57
【问题描述】:

我有以下代码: (src/main/scala/coins/coins.scala)

object Main extends App { 

  def countChange(money: Int, coins: List[Int]): Int = {
  [...]

我正在尝试从这样的测试中引用它: (src/test/scala/coins/CoinsSuite.scala)

package coins

import org.scalatest.FunSuite

class CoinsSuite extends FunSuite {

  import Main.countChange
  test("only onw way to pay $0") {
  [...]

我收到以下错误:

未找到:值 Main [错误] 导入 Main.countChange

但另一方面,从 sbt 控制台它可以正常工作

如果我在主文件中声明任何包,比如

package x

object Main extends App { 
  Console.println("Hello World!")

然后我可以正确地发出 导入 x.Main.countChange

是否存在我不知道的根包或单例对象可见性限制?

--添加

只是为了完成答案,在 SO 上有几个有用的链接

https://stackoverflow.com/a/2030159/47633

https://stackoverflow.com/a/9822212/47633

https://stackoverflow.com/a/9822227/47633

【问题讨论】:

  • 所以Main/coins 目录中,但不在coins 包中?顺便说一句,试试import _root_.Main.countChange
  • 我试过了:object Main is not a member of package
  • 我尝试了几个选项,这就是为什么 Main 最终在 /coins 目录中,但据我所知,scala 中的包与目录结构无关......

标签: scala import packages


【解决方案1】:

Java(和 Scala 根据相同的约定)对于在未命名的包中导入东西很不爽,这与根包不同。将Main 放入一个包中。

Why is my object not a member of package <root> if it's in a separate source file?

【讨论】:

  • 无法放入包中怎么办? AWS Glue 作业脚本根本不允许这样做,因此并不总是一种选择。
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 2022-07-06
  • 2022-07-06
  • 1970-01-01
相关资源
最近更新 更多