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

时间:2015-06-30 18:03:46

标签: scala stack rdd

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

  1. 这部分如何运作:

     case x :: y :: xs => xs ++ List(op(y, x))
    
  2. 我在计算中使用的类型是整数和RDD,因此在本例中我更换了" Float"与"任何"是对的吗?

1 个答案:

答案 0 :(得分:1)

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

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

关于第二个问题,我对你将一个项目解析为RDD的确切方式感到困惑,但我建议你制作一种可以封装的令牌类。整数或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}
}