2013-12-23 30 views
1

迭代我想在下面的方式,使用迭代有關Scalatra的輸入

for (
     input1<- params.getOrElse("input1", ""); 
     input2 <- params.getOrElse("input2", ""); 
     search <- params.getOrElse("search", false) 
    ) { 
     //Perform action 
    } 

它拋出錯誤值的foreach閱讀Scalatra的webapp的輸入不是對象的成員。

如果用戶沒有提供任何輸入,它應該默認爲空字符串,並調用動作而不是循環。出於這個原因,我正在使用getOrElse。但我沒有成功。

任何幫助?

+2

'params'的類型是什麼?我猜這是'Map [String,Something]',所以你應該用'val input1 = params.getOrElse(...)'替換'input1 < - params.getOrElse(...)'(對於'input2'和'search')並移除'for',但由於您在'getOrElse'('String'和'Boolean')中使用了不同的類型,因此您將獲得類型爲「Any」的值。 – senia

回答

1

您可以使用,內涵與Option工作,但你不能使用它不具有至少一個定義foreachmapflatMap對象。在你的情況,如果params正在恢復選項,然後...

for(
    input1 <- params get "input1" 
    input2 <- params get "input2" 
){ 
    //do stuff 
} 

其中,這將不會運行,如果兩個inputinput2None

如果你不想短路的控制邏輯,你希望這是明智的默認值Option回報,那麼更好的辦法就是做

myFunction(params getOrElse ("input1", "default1"), params getOrElse ("input2", 42)) 

在那裏你提供明確的默認值並將它們傳遞給函數調用。

+1

你不覺得'val input1 = params.getOrElse(「input1」,「」)'是OP想要的。 – senia

+0

@senia號。他正在做結果的副作用手術。沒有必要存儲一次傳入該函數的值。 – wheaties