【发布时间】:2019-11-09 00:26:08
【问题描述】:
嗨,我正在尝试在我正在编写的一些 Scala 代码中弹出堆栈中的顶部元素,但是内置 Stack 类的 pop 函数返回整个堆栈减去顶部元素,这不是我追赶。
似乎在 Scala 中实现堆栈的推荐方法是使用List,然后使用tail 和:: 作为pop 和push。 tail 还返回一个减去“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