嘿家伙, 即时通讯工程在斯卡拉的一个项目,我遇到了非常奇怪的问题。这是代码的一部分:对象被随机“变”为空
class Entity(val id:String){
override def toString = id
}
class RequirementType
case class DependsEither(t:List[(Entity,Int)]) extends RequirementType
case class Depends(t:(Entity,Int)) extends RequirementType
class BuildableEntity(override val id:String,
val mineralCost:Int,
val gasCost:Int,
val buildTime:Int,
val buildCount:Int,
val supplyCount:Int,
val req:List[RequirementType],
val onBuildStart: GameState => GameState,
val onBuildFinish: GameState => GameState
)extends Entity(id)
class SimpleBuilding(id:String,
mineralCost:Int,
gasCost:Int,
buildTime:Int,
req:List[RequirementType]
) extends BuildableEntity(id,mineralCost,gasCost,buildTime,1,0,req:::List(ConsumesOnStart((Drone,1))),{s=>s},{x=>x})
object SpawningPool extends SimpleBuilding("spawningPool",200,0,65,List(DependsEither(List((Hatchery,1),(Lair,1),(Hive,1)))))
object Lair extends SimpleBuilding("lair",150,100,80,List(ConsumesOnFinish(Hatchery,1),Depends(SpawningPool,1)))
object InfestationPit extends SimpleBuilding("infestationPit",100,100,50,List(DependsEither(List((Lair,1),(Hive,1)))))
现在,当我调用的println(Lair.req),它有时打印为
列表(ConsumesOnFinish((孵化,1)),Depends中((NULL,2)),ConsumesOnStart((无人驾驶飞机,1)))
,有时作为
列表(ConsumesOnFinish((孵化场,1)), 取决于((spawningPool,2)),ConsumesOnStart((无人驾驶飞机,1)))
请,如果任何人有什么可能是任何想法出错了,我会永远爱你。我不知道它为什么会这样做。我有更多的扩展SimpleBuilding,但他们似乎正常工作
编辑: 我还应该提到编译后的结果改变。我的意思是,当我运行单元测试时,它有时显示为空,有时显示为正确的实例。
你还没有发布'Depends'和'SpawningPool'这是奇怪发生的地方的代码... – huynhjl 2011-04-10 01:49:38
愚蠢的我,固定。感谢您抽出宝贵时间,仔细查看! :] – Arg 2011-04-10 08:01:14
我很确定它与SpairningPool的Lai对象的定义顺序有关。 – 2011-04-10 08:13:42