2016-03-23 5 views
0

私はリストを持っています。奇妙な位置にあるすべての数字について、私は0にしたいと思います。そして、すべての数字が偶数であれば、それをそのまま保ちたいと思います。私は次のようにマップを使ってそれをしようとしています。前方参照は、scalaの変数の定義に及ぶ

は、ここで私は変数は位置を追跡したい私のコード

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の前方参照は、それがそのようにインクリメントすることはありませんので、私はまた、関数内「C」を宣言することはできません変数cの定義

に及ぶ次のエラーを取得します。

マップの助けを借りて、私が試みていることを達成するためのアイデアの方法は何でしょうか。

答えて

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に、アクセスしようとしています。これらの2行を並べ替えるとうまくいきます。しかし私は私の最初のアプローチにこだわることをお勧めします。

+0

パーフェクトアンサー、 –