我跟随Coursera上的Scala函数式程序设计课程第二周的倒水视频。
我的代码和Martin的代码几乎一样,看起来编译得很好。并且我能够在我的工作表中实例化这个类的实例。
但是当我检查对象时,一些成员在那里,一些成员不在那里。
下面是我的代码:
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
}我不明白哪里出了问题。集成开发环境(IntelliJ)自动完成了成员名称,那么为什么它会抱怨它不是成员呢?我是不是遇到了Scala bug?或者是IntelliJ的bug?
任何帮助都将不胜感激
发布于 2017-05-12 23:00:24
在这个过程中,预期的行为发生了变化。视频中编写的代码不再适用于IntelliJ中最新的Scala工作表。
所需要做的就是移除代码周围的object XXX { }包装器,一切工作正常。
发布于 2017-02-04 02:20:20
如果intelliJ没有正确地显示成员,一个技巧是删除.idea文件夹,然后在intelliJ中重新打开项目。它可能会解决这个问题。如果这不起作用,您可以尝试使intelliJ的缓存无效。https://www.jetbrains.com/help/idea/2016.3/cleaning-system-cache.html
https://stackoverflow.com/questions/42015766
复制相似问题