2016-03-28 19 views
0

Buraya geldiğimde scala REPL üzerinde bir şeyler yapmaya çalışıyordum. Varsayalım iScala Listenin Kesişimi ve Listenin Opsiyonu

val list1:List[String]=List("test1","test2") 

söylemek bir liste var ve ben kesiştiği yöntemine ellerimi çalışıyordu bu

val list2:Option[List[String]]=Some(List("test1")) 

gibi bir şey var ve bu

list2.getOrElse(List.empty).intersect(list1) 

i sonucu bekliyordum çalıştı Liste ("test1") yerine boş bir liste aldım. Ben neyi özlüyorum?

+0

Kodunuz Eğer herhangi bir sorun – suish

+1

olmadan ben 'list2.map düşünüyorum beklediğiniz döndürür (_. Kesişir (list1)). GetOrElse (List.empty)' daha mantıklı bir karar. Ve 'Yok' için 'kesişen' yoktur. –

+0

Bu iyi bir seçenek gibi görünüyor – Rakshith

cevap

1

Hmmm.

Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> val list1:List[String]=List("test1","test2") 
list1: List[String] = List(test1, test2) 

scala> val list2:Option[List[String]]=Some(List("test1")) 
list2: Option[List[String]] = Some(List(test1)) 

scala> list2.getOrElse(List.empty).intersect(list1) 
res0: List[String] = List(test1) 
+0

Ben scala 2.10.4 kullanıyor görünüyor. Sence wrt scala sürümü sorunu oldu mu? – Rakshith

+1

@Rakshith Hayır - Sadece 2.10.4 bu denedim ve beklediğiniz sonuç verir. –

+0

gayet çalışıyor aniden gibi görünüyor. Tekrar kapattım ve tekrar açtım. – Rakshith

1

daha deyimsel bir yaklaşım olabilir fold kullanma: Ben sorunu yeniden olamaz.

scala> :pa 
// Entering paste mode (ctrl-D to finish) 

val list1:List[String]=List("test1","test2") 
val list2:Option[List[String]]=Some(List("test1")) // first try it with Some() 

// Exiting paste mode, now interpreting. 

list1: List[String] = List(test1, test2) 
list2: Option[List[String]] = Some(List(test1)) 

scala> list2.fold(List[String]()){_.intersect(list1)} 
res22: List[String] = List(test1) 

scala> val list2:Option[List[String]]=None // now try it with None 
list2: Option[List[String]] = None 

scala> list2.fold(List[String]()){_.intersect(list1)} 
res23: List[String] = List()