我写了一个算法来获取一个中缀语句将其更改为postfix,现在我想对该语句执行计算。我看过this as a sample但我无法理解它的某些部分会发生什么。它使用的是Scala Stack。
这部分如何运作:
case x :: y :: xs => xs ++ List(op(y, x))
我在计算中使用的类型是整数和RDD,因此在本例中我更换了" Float"与"任何"是对的吗?
答案 0 :(得分:1)
将我的评论移到答案中,然后尝试回答第2部分:
::
是一种特殊语法,List
(以及其他集合)代表现有列表的前置。有问题的模式(在包含match
的上下文中)是匹配具有两个元素的列表(分别存储在x
和y
中)和余数(其中)可以为空或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}
}