Я следую вместе с видеофильмом Water Pouring на второй неделе разработки функциональной программы в Scala на Курсере.Получение «значение x не является членом xyz»
Мой код почти идентичен Мартину. Кажется, что он просто компилируется. И я могу создать экземпляр класса на моем листе.
Но когда я проверяю объект, некоторые члены там, а некоторые нет. Я получаю сообщение об ошибке «значение 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?
Любая помощь будет оценена
Ваш код работает нормально. Вы вставляете его в REPL. Проблема, вероятно, связана с IntelliJ, которая, как известно, имеет такое поведение. – pedrofurla
Спасибо @pedrofurla - так как я могу исправить проблему с IntelliJ? –
Использование SBT: http://www.scala-sbt.org/ – pedrofurla