Scala 包对象定义不在范围内
在我的包com.example.common中,我有一个package.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] } 现在,在这个文件中,我认为
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
的文件中,该文件位于与packagep
对应的目录中
所以你应该有以下几点
- 名为
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 = ???
}
}
}