我正在跟随Coursera的Scala课程中功能性课程设计第2周的Water Pouring视频。
我的代码几乎与Martin的相同。它似乎编译得很好。我能够在我的工作表中实例化该类的实例。
但是当我检查对象时,有些成员在那里,有些则没有。我得到一个错误“值initialPath不是water.Pouring的成员”
这是我的代码:
class Pouring(val capacity : Vector[Int] ) {
type State = Vector[Int]
val initialState : State = capacity map ( x => 0 )
// Moves
trait Move {
def change( state : State ) : State
}
case class Empty( glass: Int ) extends Move {
def change( state: State ) = state updated( glass, 0 )
}
case class Fill( glass: Int ) extends Move {
def change( state: State ) = state updated( glass, capacity( glass ) )
}
case class Pour( from: Int, to: Int ) extends Move {
def change( state: State ) = {
val amount = state(from) min (capacity(to) - state(to))
state.updated( from, state(from) - amount )
.updated( to, state(to) + amount )
}
}
class Path(history: List[Move]) {
def endState : State = (history foldRight initialState)(_ change _)
def extend(move: Move) = new Path( move :: history )
override def toString = (history.reverse mkString " ") + " => " + endState
}
val initialPath = new Path(Nil)
val glasses = capacity.indices
val moves =
( for ( g <- glasses ) yield Empty(g) ) ++
( for ( g <- glasses ) yield Fill(g) ) ++
( for ( from <- glasses ; to <- glasses if from != to ) yield Pour(from,to) )
def from( paths: Set[Path] ): Stream[Set[Path]] =
if ( paths.isEmpty ) Stream.empty
else {
val more = for {
path <- paths
move <- moves
} yield path.extend( move )
paths #:: from( more )
}
val pathSets = from(Set(initialPath))
}
我的工作表很简单:
object testing {
val problem = new Pouring(Vector(4, 7))
problem.initialState // works
problem.glasses // works
problem.moves // works
problem.initialPath // fails
problem.pathSets // fails
}
我没有弄到什么问题。 IDE(IntelliJ)自动完成了成员名称,为什么它抱怨它不是成员?我遇到过Scala错误吗?还是一个IntelliJ错误?
任何帮助将不胜感激
答案 0 :(得分:0)
如果intelliJ没有正确显示该成员,则一个hack就是删除.idea文件夹并在intelliJ中重新打开该项目。它可能会解决问题。如果这不起作用,您可以尝试使intelliJ的缓存无效。 https://www.jetbrains.com/help/idea/2016.3/cleaning-system-cache.html
答案 1 :(得分:0)
在某些地方,预期的行为发生了变化。视频中编写的代码不再适用于IntelliJ中的最新Scala工作表。
所需要的只是删除代码周围的object XXX { }
包装器,一切正常。