首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取“值x不是xyz的成员”

获取“值x不是xyz的成员”
EN

Stack Overflow用户
提问于 2017-02-03 10:29:40
回答 2查看 319关注 0票数 0

我跟随Coursera上的Scala函数式程序设计课程第二周的倒水视频。

我的代码和Martin的代码几乎一样,看起来编译得很好。并且我能够在我的工作表中实例化这个类的实例。

但是当我检查对象时,一些成员在那里,一些成员不在那里。

下面是我的代码:

代码语言:javascript
运行
复制
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))

}

我的工作表非常简单:

代码语言:javascript
运行
复制
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?

任何帮助都将不胜感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-12 23:00:24

在这个过程中,预期的行为发生了变化。视频中编写的代码不再适用于IntelliJ中最新的Scala工作表。

所需要做的就是移除代码周围的object XXX { }包装器,一切工作正常。

票数 0
EN

Stack Overflow用户

发布于 2017-02-04 02:20:20

如果intelliJ没有正确地显示成员,一个技巧是删除.idea文件夹,然后在intelliJ中重新打开项目。它可能会解决这个问题。如果这不起作用,您可以尝试使intelliJ的缓存无效。https://www.jetbrains.com/help/idea/2016.3/cleaning-system-cache.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42015766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档