【问题标题】:How to pop and return the top element of a stack in scala如何在scala中弹出并返回堆栈的顶部元素
【发布时间】:2019-11-09 00:26:08
【问题描述】:

嗨,我正在尝试在我正在编写的一些 Scala 代码中弹出堆栈中的顶部元素,但是内置 Stack 类的 pop 函数返回整个堆栈减去顶部元素,这不是我追赶。

似乎在 Scala 中实现堆栈的推荐方法是使用List,然后使用tail:: 作为poppushtail 还返回一个减去“top”元素的列表。

如何才能返回元素以便将其存储在变量中?

编辑

我有这段代码来演示发生了什么:

sealed trait Symbol {
    def withType(): String
    def withValue(): String
}

class Lexer extends LexerTokeniser[Symbol] {

    case class Element(typeOf: String, value: String) extends Symbol {
        override def withType(): String = typeOf
        override def withValue(): String = value
    }

    private val controlStack = Stack[Element](Element("String", "s")) 

    val topEl = controlStack.pop // This sets topEl to type Stack[Element]
    val newTopEl = topEl.withValue() // This is an error, no such function
}

【问题讨论】:

  • 来自 collection.mutable.Stack 的 ScalaDocs 页面:def pop(): A “从堆栈中移除顶部元素并返回它”。看来您对pop() 方法的理解是错误的。也许你可以发布一些做你想做的事情的代码。
  • 我已经添加了我写的内容,并在代码中显示了 cmets 中的问题。谢谢
  • 我无法重现您描述的错误。为了编译您的示例,我确保 Stack 指的是 collection.mutable.Stack。它现在可以为我编译和运行而没有错误。你用的是什么imports?
  • 非常感谢,现在正在工作。您能否详细说明为什么它在变为可变之前返回 Stack[Element] 类型?非常感谢您的帮助:)
  • 因为你可能使用了其他类型的 Stack

标签: scala list stack


【解决方案1】:
import scala.collection.mutable.Stack

val stack = Stack[String]("a","b","c")

val popped = stack.pop

println(popped)// a

这就是你想要的,我想你把尾巴和流行混为一谈了。

【讨论】:

  • 我添加了一些代码来突出显示我看到的内容。我没有得到一个元素类型,而是一种堆栈 [元素]。这与您的解释不符(这是我想要它做的)
猜你喜欢
  • 1970-01-01
  • 2013-06-19
  • 2020-12-19
  • 2020-06-06
  • 1970-01-01
  • 2017-03-15
  • 2022-11-02
  • 2016-06-29
  • 2020-02-18
相关资源
最近更新 更多