如何使用 Scala Stack 进行后缀算术计算?

How to use Scala Stack for a postfix arithmetic calculation?

我写了一个算法来将中缀语句更改为后缀,现在我想对该语句执行计算。我看过 this as a sample 但我无法理解其中某些部分发生了什么。它正在使用 Scala Stack。

  1. 这部分是如何工作的:

     case x :: y :: xs => xs ++ List(op(y, x))
    
  2. 我在计算中使用的类型是整数和 RDD,所以在此示例中,如果我将 "Float" 替换为 "Any" 对吗?

要将我的评论移到答案中,然后尝试回答第 2 部分:

:: 是一种带有 List(以及其他集合)的特殊语法,表示在现有列表之前添加。所讨论的模式(在包含 match 的上下文中)是匹配具有两个元素(将分别存储在 xy 中)和余数(其中可以为空或 Nil 并存储在 xs).

至于第二个问题,我对您将如何准确地将一个项目解析为 RDD 感到有点困惑,但我建议您制作一种令牌 class可以封装整数或 RDD。这样,您就不会在尝试传递完全不相关的值时出现任何错误,因为您将其声明为 Any.

编辑:根据您的评论,我会推荐这样的东西:

expressions match {
    case x: RDD :: y: RDD :: xs => {//do what you want with two RDDs here}
    case x: RDD :: y: Int :: xs => {//do what you want with one of each here}
    case x: Int :: y: RDD :: xs => {//do what you want with one of each in the other order here}
    case x: Int :: y: Int :: xs => {//do what you want with two Ints here}
}