2016-08-01 67 views
1

所以我有幾個網頁我想要訪問,每個頁面都有我想要計數的項目列表,然後單擊下一頁按鈕直到最後一頁並返回List[Double](每個頁面內我需要解析一些值,這就是爲什麼Double變量)。使用遞歸循環網頁 - 函數不處理第一頁

所以我有這個isNextPageExist功能的情況下,返回下一個頁面URL它存在和None否則:

def isNextPageExist(): Option[String] = { 

    } 

此函數計算網頁的總量:

def calculatePageValue(): Double = { 

    } 

和遞歸功能:

def getTotalValue(option: Option[String]): List[Double] = { 

    option match { 
     case Some(x) => { 
     driver.get(isNextPageExist.get) 
     calculatePageValue() :: getTotalValue(isNextPageExist) 
     } 

     case None => Nil 
    } 
    } 

所以這工作正常,除了這個功能不計算第一頁的事實。 當我將這個函數稱爲第一頁時,我需要計算這個頁面,然後進入下一頁。

順便說一句我有另一個2函數返回BooleanisFirstPageisLastPage但我不知道是否需要使用它們。

回答

0

所以從它的聲音中,你已經確定了這個問題。 您已經在第一頁上,但您的代碼首先要調用的是下一頁。

相反,您應該先調用calculatePageValue。 因此,在您的一些(x)的情況下,像

val currentValue = calculatePageValue() 
driver.get(isNextPageExist.get) 
currentValue :: getTotalValue(isNextPageExist) 

編輯:

重新望着我很困惑,爲什麼不拋出異常的代碼。 isNextPageExist在最後一頁上應該返回None。當driver.get(isNextPageExist.get)被調用時,這應該拋出一個異常,也許這就是爲什麼最後一頁沒有被計算出來(並且隱藏了異常)。

也許嘗試重構代碼稍微看起來像:

def getTotalValue(url: String): List[Double] = { 
    driver.get(url) 
    val currentValue = calculatePageValue() 
    val nextValues: List[Double] = isNextPageExist.map{nextUrl => 
     getTotalValue(nextUrl) 
    }.getOrElse(Nil) 
    currentValues :: nextValues 
} 
+0

現在最後頁面丟失... –

+0

只是要注意的,我寫這個解決方案,我沒有訪問Scala編譯器在機器上等等代碼中可能存在拼寫錯誤或類似錯誤。 –

+0

沒有錯字,但行val nextValues:List [Double] = isNextPageExist2.map {nextUrl => getTotalValue(nextUrl)一次又一次地運行,並且第一頁在循環中 –