Scala中用于理解的补救语法问题
我在Scala 2.10中遇到了语法问题,无法理解Scala中用于理解的补救语法问题,scala,list-comprehension,Scala,List Comprehension,我在Scala 2.10中遇到了语法问题,无法理解 for(a我最近已经解释了这一点——希望有人能找到链接。这是一个反复出现的问题,所以很可能会被关闭 无论如何,外部生成器控制表示。这在每个级别上都会发生,因此如果我有: for { a <- A b <- B c <- C } yield f(a, b, c) 用于{ aDaniel解释了这一点的复杂性。但我想补充一些细节,因为我发现这种行为非常不直观,我自己也曾遇到过将选项和列表混合在一起的问题。这尤其令人讨
for(a我最近已经解释了这一点——希望有人能找到链接。这是一个反复出现的问题,所以很可能会被关闭
无论如何,外部生成器控制表示。这在每个级别上都会发生,因此如果我有:
for {
a <- A
b <- B
c <- C
} yield f(a, b, c)
用于{
aDaniel解释了这一点的复杂性。但我想补充一些细节,因为我发现这种行为非常不直观,我自己也曾遇到过将选项
和列表
混合在一起的问题。这尤其令人讨厌,因为正如你所看到的,它在一个方向工作,而不是在另一个方向
因此,根据理解规则,你将
def test(a: Option[List[Int]]) = a.flatMap(_.map(identity))
失败于
<console>:7: error: type mismatch;
found : List[Int]
required: Option[?]
def test(a: Option[List[Int]]) = a.flatMap(_.map(identity))
^
或使用返回以查看:
for(a <- Some(List(1,2)).toIterable; b <- a) yield b
for(可能是重复的,也是重复的,谢谢Daniel)。如果问题是重复的,我不会感到惊讶,因为很难搜索,而且关于理解的“Scala之旅”文档没有解释这种行为。真正让我绊倒的是(a@DanielSchobel好吧,在没有收益率的情况下,你不会返回任何东西,所以没有问题。因为你不能有一些(1,2)
,你不可能拥有屈服
版本。我对这项工作投了赞成票,我同意,它似乎应该以其原始形式工作,特别是我在给丹尼尔的评论中指出,对于(a
for(a <- Some(List(1,2)).toIterable; b <- a) yield b