包对象中定义的类型不在范围内

时间:2014-12-25 15:05:30

标签: scala

为了避免在我的代码中的几个地方写出一个大类型,我想我会在包对象中使用类型声明来快捷它:

package pet

package object pet {
    type Ops = ((Int,Int) => Int,String)
}

object Q extends App {
    val ops = List[Ops](
        ((_+_),"+"),
        ((_-_),"-"),
        ((_*_),"*")
    )
}

但它说val ops,找不到Ops。我猜我是在误解某些东西,但在查看了几个包对象的例子后,我不知道是什么。包对象本身没有错误,所以我不认为这是一个问题。

2 个答案:

答案 0 :(得分:2)

声明package object时,您需要将其放在"上面的#34;中。目前,您已在 package object pet内声明package pet ,因此Ops实际上位于路径pet.pet.Ops

在您的情况下,您应该将package object放在其自己的文件中,而不需要package声明。

如果您import pet.pet._ Q内{{1}},它也会有用。

答案 1 :(得分:0)

  

每个包都允许有一个包对象。任何定义   放在包对象中的被认为是包的成员   本身。

here可以看出,定义是特定于包的(在本例中为pet.pet)。所以你需要import使用它们。

您可以尝试:

object Q extends App {
  import pet.pet._
  ...