Scala 将特征导入工作表时出错
我在包中的不同文件中有以下对象和特征定义Scala 将特征导入工作表时出错,scala,Scala,我在包中的不同文件中有以下对象和特征定义 object Bloxorz extends App // in Bloxorz.scala trait Solver extends GameDef // in Solver.scala trait GameDef // in GameDef.scala trait GameDef中有一个方法我想测试一下。因此,我在包的根目录中创建了一个工作表,并尝试导入它 import streams.GameDef._
object Bloxorz extends App // in Bloxorz.scala
trait Solver extends GameDef // in Solver.scala
trait GameDef // in GameDef.scala
trait GameDef
中有一个方法我想测试一下。因此,我在包的根目录中创建了一个工作表,并尝试导入它
import streams.GameDef._
但是我收到以下错误
object GameDef is not a member of package streams. Note: trait GameDef exists, but it has no companion object
由于Solver
扩展了GameDef
,我想我需要导入Solver
,但这产生了相同的错误。仅导入Bloxorz
对象不会引发错误,但不会暴露我在GameDef
中需要的方法。请尝试以下操作:
import streams.GameDef
上面的代码正在导入名为GameDef的包的所有类。我猜GameDef是一个类、对象或特征,因为它是大写的。事实上,您遇到的错误很好地描述了您的问题:
对象GameDef不是包流的成员。注意:trait GameDef存在,但它没有伴生对象我根据您所说的和我的假设创建了代码片段。我以为你只想测试Pos,而不是GameDef GameDef.scala:
package test
trait GameDef {
case class Pos(x: Int, y: Int) {
// Pos will play with x and y here.
}
}
yoursheet.sc:
package test
object TestPosInsideGameDef extends GameDef {
def newPos(x: Int, y: Int): Pos = new Pos(x, y)
val pos = newPos(1, 2)
}
你是说你在测试套件中导入了<代码>吗?不是测试套件,只是一个普通的临时工作表。我已经在BloxorzSuite.scala中实现了测试,但是我想要一个临时工作表,只是用来玩,不一定要正式编写测试。谢谢。尝试了,但GameDef中的类没有公开。我在
GameDef
中有一个case类Pos(x:Int,y:Int)
。我试图在工作表中将这个类实例化为valp=Pos(2,3)
,但产生了错误notfound:type Pos
。我尝试扩展GameDef
像object streamsCratch扩展GameDef
,但出现了一个错误,工作表无法计算。听起来像Pos
是一个内部类。很抱歉,您能详细说明一下吗?我能做些什么来访问这个内部类呢?如果你在Java中尝试这样做(使用eclipse),你会得到一个非常描述性的错误:“没有GameDef类型的封闭实例可访问。必须使用GameDef类型的封闭实例来限定分配(例如x.new A(),其中x是GameDef的实例)。”换句话说,要创建Pos实例,首先需要创建GameDef实例:val gd=new GameDef{…}
。然后您可以像这样创建一个Pos:val p=new gd.Pos(2,3)
。与其公开Pos,不如创建一个GameDef实例并在其中进行测试;假设我有一个模板类,它有一个内部类:classouterclass[T](val-foo:T){…class-InnerClass{val-bar:T=foo…}}
。在这种情况下,创建Outer.internal
的实例是没有意义的,因为没有指定t(即未指定bar
的类型)。一种语言可以公开它的嵌套类型(静态地?),也可以有模板类,Scala选择了后者,这是理所当然的。