首页
学习
活动
专区
圈层
工具
发布

返回股
EN

Stack Overflow用户
提问于 2014-02-15 13:51:40
回答 2查看 86关注 0票数 0

我想用它的名字压缩一个月的索引:

代码语言:javascript
复制
  val res = for(i <- 1 to 12) {
    val m = DateTime.parse(i.toString, DateTimeFormat.forPattern("mm").withLocale(Locale.US))
    yield (i, m.monthOfYear().getAsString)
  }

为什么resUnit

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-15 13:56:04

这可能是一个更好的方法:

代码语言:javascript
复制
val res = (1 to 12) map { i =>
    val m = DateTime.parse(i.toString, DateTimeFormat.forPattern("mm").withLocale(Locale.US))
    (i, m.monthOfYear().getAsString)
  }

但是你的for不起作用,因为“产生”关键字应该在"for“之外。

代码语言:javascript
复制
 val res = for {
     i <- 1 to 12
     m = DateTime.parse(i.toString, DateTimeFormat.forPattern("mm").withLocale(Locale.US))
  } yield (i, m.monthOfYear().getAsString)
票数 3
EN

Stack Overflow用户

发布于 2014-02-15 13:56:27

你的理解力应该是:

代码语言:javascript
复制
val res = for(
    i <- 1 to 12;
    m = DateTime.parse(i.toString, DateTimeFormat.forPattern("mm").withLocale(Locale.US))
) yield (i, m.monthOfYear().getAsString)

但是,如果有表单的for表达式,则给出的代码不会编译。

代码语言:javascript
复制
for(i <- 1 to 12) {
   ...
}

这是转换成

代码语言:javascript
复制
1.to(12).foreach(i => ... )

返回Unit,这就是为什么res在代码中是Unit的原因。

您需要使用yield创建一个投影。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21798425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档