我有一份清单。对于奇数位置的所有数字,我想把它设为0.对于偶数位置的所有数字,我想保持原样。我正试图通过以下方式通过地图来做。
这是我的代码
def main(args: Array[String]) {
var l1 = List (1,2,3,4,5,6)
println(l1.map(f(_)))
var c = 0
def f(n:Int):Int =
{
if (c%2 == 0)
{c +=1
return n}
else
{c += 1
return 0}
我希望变量能够跟踪位置。但是看起来,我无法转发参考'c'。
我收到以下错误
scala forward reference扩展了变量c
的定义
我不能在函数中声明'c',因为它永远不会增加。
在地图的帮助下,应该通过什么方式实现我的目标。
答案 0 :(得分:5)
我有一份清单。对于奇数位置的所有数字,我想做到 对于偶数位置的所有数字,我想保持原样。
这是这个问题的优雅解决方案:
l1.zipWithIndex map { case (v, i) => if (i % 2 == 0) v else 0 }
至于原因,为什么你的代码失败了:你在代码声明之前尝试访问变量c
。这里:
println(l1.map(f(_)))
var c = 0
您的函数f
正在尝试访问尚未声明的变量c
。重新排序这两行,它将起作用。但我建议坚持我的初步方法。