如何在Scala中的多维循环中扩展到yield?

Yun*_*hen 0 scala

这里我们开始知道一个表达式:

for( i <- 1 to 10 ) yield i + 1
Run Code Online (Sandbox Code Playgroud)

将扩展到

( 1 to 10 ).map( _+1 )
Run Code Online (Sandbox Code Playgroud)

但是下面的表达式扩展到了什么?

for( i <- 1 to 50  j <- i to 50 ) yield List(1,i,j)
Run Code Online (Sandbox Code Playgroud)

它是否正确?

( 1 to 50 ).map( x => (1 to 50 ).map(List(1,x,_))
Run Code Online (Sandbox Code Playgroud)

我对这个问题感兴趣,因为我想创建一个执行多个Xi <- Xi-1 to 50操作的函数,如下所示:

for( X1 <- 1 to 50  X2 <- X1 to 50  X3 <- X2 to 50 ..... Xn <- Xn-1 to 50 ) 
    yield List(1,X1,X2,X3,.....,Xn)
Run Code Online (Sandbox Code Playgroud)

该函数有一个参数:dimension表示n上面的表达式.
它的返回类型是IndexSeq[List[Int]]

我怎样才能做到这一点?

谢谢你的回答(:

om-*_*nom 5

它在相关文档中得到了很好的解释.特别是:

for(x <- c1; y <- c2; z <- c3) yield {...}
Run Code Online (Sandbox Code Playgroud)

将被翻译成

c1.flatMap(x => c2.flatMap(y => c3.map(z => {...})))
Run Code Online (Sandbox Code Playgroud)

我认为没有办法抽象任意嵌套理解(除非你使用巫毒魔法,比如宏)