2010-09-16 10 views
6

içinde iade Ben kabul eden bir işlev yapmak istiyorum türünde bir nesne e E.bir işlev içinde birden Listeleri Değiştirme ve Scala

ile türünde bir listesi [T] ve scala içinde [B], var bu üç parametre:

def doSomething(t : List[T], b List[B], e : E) { 
... } 

Ancak bunu Liste değişmez gerçekleştirmek ve bir işleve geçirilen şey val (değil var) olarak kabul edilir. Fakat t ve b'yi değiştirmem ve modifikasyonları işlevin arayana geri göndermem gerekiyor. Bunun nasıl yapılacağı hakkında bir fikri olan var mı?

cevap

15

Sen üstünü kullanarak işlevsel bir şekilde t ve b değiştirmesi gerektiğini

gidip her yerde bunu kullanıyorum ve dosya çok büyük olduğu için ... diziye listeyi değiştiremezsiniz .. map, filter, gibi sipariş fonksiyonları ve bunların yeni val s (ör. modifiedT, modifiedB) içine koyun. Daha sonra, 2 değeri yöntemi döndürmek için Tuple2 kullanabilirsiniz. Tabii

val (t2, b2) = doSomething(t, b, e) 

size "değiştirmek" ile ne anlama bağlıdır:

def doSomething(t: List[T], b: List[B], e: E) = { 
    // somehting you want to do 
    val modifiedT = t.map(...).filter(...) 
    val modifiedB = b.map(...).filter(...) 
    (modifiedT, modifiedB) // returns a Tuple2[List[T], List[B]] 
} 

çağıran yöntemde sonra değerleri bu şekilde atayabilirsiniz. Bu değişiklik karmaşık bir işlemse, hesaplama zamanını daha sonraki bir noktaya taşımak için hesap temsili yapmak için view kullanmayı düşünmelisiniz.

+3

Bir şey döndüğünüzde '=' e: E 'ye ve '{' arasına ihtiyacınız var. –

+0

Doğru Rex sensin, teşekkürler. Scala'da ne kadar sıklıkla unutabildiğimi bilmiyorum ... = –

+0

Teşekkür ederim, gerçekten iyi çalışıyor Michael! –

İlgili konular