2016-03-23 20 views
0

Listem var. Tek sayıdaki tüm sayılar için bunu 0 yapmak istiyorum. Ve tüm sayıların eşit pozisyonda olması, onu olduğu gibi tutmak istiyorum. Bunu harita yoluyla aşağıdaki şekilde yapmaya çalışıyorum.Forward reference, scala değişkeninin tanımı üzerinde uzanmaktadır

Burada değişken pozisyonuna takip etmek istiyorum benim kod

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} 

bu. Ama göründüğü gibi, 'c' referansını iletemem. bu şekilde artırmak asla çünkü

I

Scala ileri başvuru

Ayrıca işlev içinde 'c' ilan olamaz değişken c tanımı boyunca uzanan aşağıdaki hata olsun . Harita yardımıyla, çalıştığım şeyi elde etmenin yolu nedir?

cevap

5

Listem var. Tek sayıdaki tüm sayılar için 0 yapmak istiyorum. Ve tüm rakamlar eşit pozisyondayken, onu olduğu gibi tutmak istiyorum.

İşte bu sorunun zarif çözüm:

kodunuzu başarısız nedenine gelince
l1.zipWithIndex map { case (v, i) => if (i % 2 == 0) v else 0 } 

: kodda bildiriminden önce değişken c erişmeye çalışıyoruz. İşte:

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

İşleviniz f henüz bildirilmemiş değişken c, erişmeye çalışıyor. Bu iki satırı yeniden sırala ve işe yarayacak. Ama ilk yaklaşımımla kalmayı tavsiye ederim.

+0

Mükemmel cevap, –