我寫了一個算法來獲得一箇中綴語句將其更改爲postfix,現在我想對該語句執行計算。我看過this as a sample,但我無法理解它的某些部分會發生什麼。它正在使用Scala Stack。如何使用Scala Stack進行後綴算術計算?
如何做這部分工作:
case x :: y :: xs => xs ++ List(op(y, x))
,我用我的計算類型是整數和RDDS因此,在這個例子中,如果我用「任何」取代「浮動」是對的嗎?
我寫了一個算法來獲得一箇中綴語句將其更改爲postfix,現在我想對該語句執行計算。我看過this as a sample,但我無法理解它的某些部分會發生什麼。它正在使用Scala Stack。如何使用Scala Stack進行後綴算術計算?
如何做這部分工作:
case x :: y :: xs => xs ++ List(op(y, x))
,我用我的計算類型是整數和RDDS因此,在這個例子中,如果我用「任何」取代「浮動」是對的嗎?
要將我的評論到一個答案,然後試圖回答第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}
}
我已經實現了用於RDD計算的「+ -/*」,我的RDD是:RDD [(Int,Array [Float])]現在我需要做的是當我檢查是否有兩個項目列表來執行操作,以及它們是RDD還是浮點數,RDD和RDD,還是浮點數和浮點數,然後調用我的覆蓋+ - * /並將結果推送回堆棧 – Rubbic
已更新的答案反映了這一點。 – childofsoong
非常感謝你,這是一個很好的提示,並給了我一個想法如何處理它! – Rubbic
如果你不明白是什麼線是幹什麼的,我懷疑你有什麼不明白Scala的'match'語句做在所有。看看像http://docs.scala-lang.org/tutorials/tour/pattern-matching.html或http://www.tutorialspoint.com/scala/scala_pattern_matching.htm這樣的教程,然後回到它。 – childofsoong
@soong謝謝我明白這個匹配我的問題是語法「x :: y :: xs」 – Rubbic
'::'是'List'特有的一種語法,它象徵着追加到列表中。所以,總體情況是'我可以將這個解析爲一個包含兩個項目和一個剩餘(可以爲空)的列表嗎?如果是這樣,那些項目是'x'和'y',其餘部分是'xs'' – childofsoong