【发布时间】:2017-12-28 17:57:39
【问题描述】:
我在一个使用 Play 框架的应用程序中看到了这段代码
val credentials : Option[(ConsumerKey, RequestToken)] = for {
apiKey <- Play.configuration.getString("twitter.apiKey")
apiSecret <- Play.configuration.getString("twitter.apiSecret")
token <- Play.configuration.getString("twitter.token")
tokenSecret <- Play.configuration.getString("twitter.token")
} yield (
ConsumerKey(apiKey, apiSecret),
RequestToken(token, tokenSecret)
)
我不确定我是否理解使用 for 循环来创建 Option[(ConsumerKey, RequestToken)] 对象的原因。为什么要选择使用“for循环”来做到这一点?
为什么不这样?
val apiKey = Play.configuration.getString("twitter.apiKey")
val apiSecret = Play.configuration.getString("twitter.apiSecret")
val token = Play.configuration.getString("twitter.token")
val tokenSecret = Play.configuration.getString("twitter.token")
val tuple: (ConsumerKey, RequestToken) = (ConsumerKey(apiKey.get, apiSecret.get), RequestToken(token.get, tokenSecret.get))
val credentials2 : Option[(ConsumerKey, RequestToken)] = Option(tuple)
【问题讨论】:
-
“用于压缩”不是用于循环
-
@cchantep 我认为它的理解是一个循环。看到这个alvinalexander.com/scala/…
-
for用于单子组合,而不是循环(这只是一种特定情况)。先看看网上的教程 -
它是一个循环,它的压缩,它的理解......不,它是 Super Scala :)