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

Sne*_*osh 0 dictionary functional-programming scala

我有一份清单.对于奇数位置的所有数字,我想将其设为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}
Run Code Online (Sandbox Code Playgroud)

我希望变量能够跟踪位置.但是看起来,我无法转发参考'c'.

我收到以下错误

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

我不能在函数内声明'c',因为它永远不会增加.

在地图的帮助下,应该以什么方式实现我的目标.

Rom*_*man 5

我有一份清单.对于奇数位置的所有数字,我想将其设为0.对于偶数位置的所有数字,我希望保持原样.

这是这个问题的优雅解决方案:

l1.zipWithIndex map { case (v, i) => if (i % 2 == 0) v else 0 }
Run Code Online (Sandbox Code Playgroud)

至于原因,为什么你的代码失败了:你试图c在代码声明之前访问变量.这里:

println(l1.map(f(_)))
var c = 0
Run Code Online (Sandbox Code Playgroud)

您的函数f正在尝试访问c尚未声明的变量.重新排序这两行,它将起作用.但我建议坚持我的初步方法.