sealed class A
class B1 extends A
class B2 extends A
biz sınıfta A
nesnelerin bir listesi varsayarsak Listesi [A] = liste, filtre istiyoruzisInstanceOf ne zaman kullanılmalıdır ve ne zaman bir eşleşme-durum bildirimi (Scala) kullanılmalıdır? val l:
ve (yeni B1, yeni B2, yeni B1, yeni B1) B1 tipi elemanlar. Sonra bir yüklemi ihtiyacımız ve aşağıdaki iki alternatifleri kullanabilirsiniz:
l.filter(_.isInstanceOf[B1])
Ya
Şahsenl.filter(_ match {case b: B1 => true; case _ => false})
, ben daha ilk yaklaşım gibi ama sık sık okunan, bir match-case
deyimi daha kullanmalıdır sık sık (bilmediğim nedenlerden dolayı).
Bu nedenle, soru şu: match-case
deyiminin yerine isInstanceOf
kullanmanın sakıncaları var mı? Ne zaman bir yaklaşım kullanılmalı (ve hangi yaklaşımın burada ve neden kullanılmalıdır)?
Ve sonunda size daha dar bir tür verir ('[B1]' Listesi). –
Çok daha okunabilir görünüyor, teşekkürler.Ama bu ifadede varsayılan durum ne olacak? Bu kısayol durum bildirimi ve nasıl kullanıldığı hakkında daha fazla bilgi nerede bulabilirim? –
@JohnThreepwood [bu gönderi] 'ye bir göz atın (http://ochafik.com/blog/?p=393). Bu en iyisi değil, ama yine de oldukça iyi "toplamanın nedeni". Kısaca, toplayıcı harita gibidir, ancak bu yönteme sadece * (parsiyel) * işlevi için tanımlanmış değerler için bir iş yapın. Bu durumda Scala'nın desen eşleştirmesi [PartialFunction] öğesinin üstünde yapılır (http://stackoverflow.com/questions/5668053/scala-partial-functions). Ayrıca, küme parantezleri kullanmanız gerekir. –