我正在学习scala,我试图在scala中做相当于这个C ++代码,但是我遇到了编译错误。这是c ++代码:
for(reels[0] = 0; reels[0] < 10; reels[0]++)
doStuff();
我试图在scala中实现这个循环,如:
var reels: Array[Int] = new Array[Int](5)
for(reels(0) <- 0 until 10)
doStuff
这会导致for循环出现编译错误:
variable reels is not a case class, nor does it have an unapply/unapplySeq member
如果我将reels(0)
替换为常规Int
变量,则可以正常使用。为什么这样,更重要的是,我将如何迭代数组元素。更具体地说,我想要做的是嵌套5个循环,并让每个循环一次只迭代一个卷轴。我不想定义5个单独的变量来解决这个问题。
提前致谢。
答案 0 :(得分:1)
这可能是你想要的:
// create your list of numbers
val reels = 0 to 9
// do something with each one.
reels.foreach {
doStuff
}
编辑: 根据您上面的评论,您可能想尝试一下comp。
def doStuff(v: Int) = println(v)
val reel = Seq(0 to 9, 0 to 9)
for {
outer <- reel
inner <- outer
}
yield doStuff(inner)
答案 1 :(得分:0)
可能这种方法会对你有所帮助:
var reels: Array[Int] = new Array[Int](5)
def doStuff(): Unit = {
print(reels(0) + " ")
}
(0 until 10).foreach(i => { reels(0) = i; doStuff })
// produces
// 0 1 2 3 4 5 6 7 8 9
答案 2 :(得分:0)
reels.foreach { item =>
//do something i.e. - println(item)
}
答案 3 :(得分:0)
根据您的上述评论,这是您要找的?没有显式变量从索引0处的reels1到索引1处的reel2?
val reels1: Array[Int] = new Array[Int](10)
val reels2: Array[Int] = new Array[Int](10)
val reels = Seq(reels1,reels2)
reels.foreach{ reel =>
for(item <- reel){
doStuff
}
}
答案 4 :(得分:0)
我找到了答案,但对我来说似乎有些麻烦。也许是因为我不习惯这样做。我想要的是这样的:
{Array.tabulate(10,10 ...){(reel1,reel2,... reel5)=&gt; / *这是我想避免做的事情。为我将使用的每个维度定义一个变量* / do_stuff(reel1,reel2,... reel5)}}