2016-04-11 95 views
0

我有一段代碼,我在裏面使用了模式匹配,我在所有情況下都使用過map,我想要得到map給變量的輸出。下面是我的代碼:如何將匹配語句的輸出保存到變量中?

override def run():List[Option[Student]] = 
StudentDataCache.get(surname) match { 
    case Some(i) => i.otherSiblings.map(siblings => 
    StudentDataCache.get(siblings) match { 
     case Some(i) => Some(i) 
     case None=> getStudentFromDatabase(siblings) 
    } 
) 
    case None => 
    getStudentFromDatabase(surname).get.otherSiblings.map(siblings => StudentDataCache.get(siblings) match { 
     case Some(i) => Some(i) 
     case None=> getStudentFromDatabase(siblings) 
     } 
    ) 
} 

內外情況下,地圖語句的輸出列表[選項[學生]:],是有辦法進入變量,是因爲我想這個列表轉換成一個單一的對象,因爲HystrixCommand執行輸出不支持List作爲輸出。我想將其轉換爲StudentListing(VAL上市:列表[選項[學生])

回答

0

只是......它分配一個值/變量:

override def run(): StudentListing = { 
    val result = StudentDataCache.get(surname) match { /* same code*/ } 
    StudentListing(result) // or however you wrap it into a StudentListing... 
} 

匹配表達式,像任何其他表達式在Scala中被評估爲一個值 - 你可以用這個值做任何你想做的事情。

+0

我得到這個錯誤: 錯誤:(44 3)的簡單表達 VAL結果非法啓動= StudentDataCache.get(姓)匹配{ ^ – user1079341

+1

你加了''{在年底上一行,爲了使它成爲'run'的多行實現而不是單行?另見這裏:http://stackoverflow.com/questions/15962563/illegal-start-of-simple-expression-in-scala –

+0

得到它..現在工作:) 謝謝 – user1079341