Scala 包对象定义不在范围内

Scala 包对象定义不在范围内,scala,Scala,在我的包com.example.common中,我有一个package.scala文件: package com.example.common import scala.concurrent.Future package object common extends MyPackage { } trait MyPackage extends MyFutures { } trait MyFutures { type Funit = Future[Unit] } 现在,在这个文件中,我认为

在我的包com.example.common中,我有一个package.scala文件:

package com.example.common
import scala.concurrent.Future

package object common extends MyPackage {
}

trait MyPackage extends MyFutures {
}

trait MyFutures {
  type Funit = Future[Unit]
}
现在,在这个文件中,我认为我可以将上述内容包括在内:

com.example.common.email

class EmailService() {
  def send(name: String): Funit = {

  }
}
但是我的别名类型Funit不在范围内,我得到错误:

no found: type Funit

这样,因为您已经在公共包中:

package com.example.common

import scala.concurrent.Future

object `package` extends MyPackage {
}

trait MyPackage extends MyFutures {
}

trait MyFutures {
  type Funit = Future[Unit]
}
并使其成为公共信息。uuu可见:

package com.example.common
package email

class EmailService() {
  def send(name: String): Funit = ???
}

您的
电子邮件服务
不在包含包对象的包中


您的包对象位于
com.package.common.common

此外,还应根据包的名称命名包对象:

包对象包对象
p
扩展
t
将模板的成员添加到包
p
。每个包只能有一个包对象。标准命名约定是将上述定义放在名为
package.scala
的文件中,该文件位于与package
p
对应的目录中

所以你应该有以下几点

  • 名为
    com/example/common/package.scala的文件
  • 包含包对象
    公共
  • 在包内声明
    com.example

你的
com.example.common.email
是什么?你确定编译成功了吗?我把
com.example.com
当作
common
,但可能是因为你的退格而被打断了。@som Snyt没有修复这个错误,谢谢。如果我在com.example.common包中有我的EmailService,为什么它不工作?该包是“com.example.common”,我的EmailService文件的顶部有“com.example.common”包。您的包对象位于com.package.common.common内您将该对象命名为包吗?我有
包对象公共扩展我的包
我很困惑!是的,包对象实际上是名为package的对象。有时这种形式是有帮助的。按照您的方式,它实际上添加了一个名为common.common的嵌套包。
import scala.concurrent.Future

package object common extends MyPackage {
}

trait MyPackage extends MyFutures {
}

trait MyFutures {
  type Funit = Future[Unit]
}

// in the same file (you mentioned "Now inside of this file I thought I can have the above in scope:")
package common {
  package email {

    class EmailService() {
      def send(name: String): Funit = ???
    }

  }

}