前向引用扩展了scala中变量的定义

时间:2016-03-23 23:20:05

标签: scala dictionary functional-programming

我有一份清单。对于奇数位置的所有数字,我想把它设为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',因为它永远不会增加。

在地图的帮助下,应该通过什么方式实现我的目标。

1 个答案:

答案 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。重新排序这两行,它将起作用。但我建议坚持我的初步方法。