2015-03-29 5 views
14

ile benzer soru benzer: Convert match statement to partial function when foreach is used. Şimdi benzer şekilde, IntelliJ kodumu geliştirmemi ister.scala: eşleme deyimine eşleme deyimine eşleme deyimini dönüştür -

val matchMe = "Foo" 
keys.foreach(key => 
    key match { 
    case `matchMe` => somethingSpecial() 
    case _ => somethingNormal(key, calcWith(key)) 
    }) 

bir anonim desen eşleştirme işlevine bu üstlenmeden gibi görünecektir:: İkinci durumda, ben kullanamazsınız

keys.foreach { 
    case `matchMe` => somethingSpecial(_) 
    case _ => somethingNormal(_, calcWith(_)) //this doesn't work 
} 

Not fark benim eşleştirme için değerlerin kullanılması yani, _ iki kere ihtiyacım var. Burada anonim bir desen eşleştirme işlevini kullanmanın bir yolu var mı?

cevap

20

_ numaralı joker karakteri kullanamazsınız, amacı, eşleme yaptığınız değeri önemsemediğinizi belirtmektir. herhangi bir değer maç olacak, bunun üzerine yerleştirilen herhangi bir kısıtlama olmadan

keys.foreach { 
    case `matchMe` => somethingSpecial(matchMe) 
    case nonSpecialKey => somethingNormal(nonSpecialKey, calcWith(nonSpecialKey)) 
} 

:

adlandırılmış bir parametreyi kullanabilirsiniz. case s sırasının, case x => ... ile eşleşmesinin önemli olduğunu ve diğer case ifadelerini kısaca eklemeniz gerektiğini unutmayın. Olarak bir kenara


, ben senin somethingSpecial(_) sen/ne istediğini onu bekler sanmıyorum. Bu somethingSpecial(matchMe) değil, sadece x => somethingSpecial(x) kısa bir sürümüdür.

+0

'f (_)' is 'x => f (x)'. Ve ks foreach {case _ => f (_)} 'ks foreach {durum x => f (x)}' değildir. –

+0

Lanet. Thats aslında bana yeni değil .. Çok teşekkürler Marth! –