首页 文章

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

提问于
浏览
0

我有一份清单 . 对于奇数位置的所有数字,我想将其设为0.对于偶数位置的所有数字,我想保持原样 . 我正在尝试通过以下方式通过 Map 来完成 .

这是我的代码

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',因为它永远不会增加 .

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

1 回答

  • 5

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

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

    l1.zipWithIndex map { case (v, i) => if (i % 2 == 0) v else 0 }
    

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

    println(l1.map(f(_)))
    var c = 0
    

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

相关问题