首先,這裏的整潔的解決辦法是:
val request = WS.url(s"http://localhost:9000/getData")
request.get.map { response =>
val names = (response.json \ "apps" \\ "name")
names.foreach(println)
}
其次,如果你不想弄不清楚的類型,你應該改變你的命名標準。對於Future
對象,你可以用前綴future
開始,爲Option
,它可以與maybe
啓動等,如果你這樣做,在你的榜樣的問題會更加明顯:
val request = WS.url(s"http://localhost:9000/getData")
val futureJson = request.get.map { response =>
(response.json \ "apps" \\ "name")
}
futureJson.foreach(println) // you call foreach for a Future, not for a List
第三,爲什麼Future
性狀會有一種叫做foreach
的方法嗎?我認爲這對初學者甚至中級開發人員來說都是令人困惑的。我們從其他語言知道,foreach意味着遍歷一系列對象。在Scala中,它被認爲是「一元行動」這仍然是一個灰色地帶,我:)的一部分,但在斯卡拉源Future.foreach
的評論是這樣的:
/** Asynchronously processes the value in the future once the value becomes available.
*
* Will not be called if the future fails.
*/
def foreach[U]
謝謝你,爲解決方案,解釋和建議。事實上,我是斯卡拉的初學者。 –