包对象定义不在范围内

时间:2017-01-16 04:22:20

标签: 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.email

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

  }
}

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

no found: type Funit

2 个答案:

答案 0 :(得分:1)

您的EmailService不在包含您的包对象的包中。

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

此外, 应根据包

命名您的包对象
  

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

所以你应该有以下

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

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 = ???
    }

  }

}

答案 1 :(得分:0)

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

package com.example.common

import scala.concurrent.Future

object `package` extends MyPackage {
}

trait MyPackage extends MyFutures {
}

trait MyFutures {
  type Funit = Future[Unit]
}

并使common._可见:

package com.example.common
package email

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