2016-10-27 15 views
6

Tôi thường thấy hai mô hình này cho phụ thêm một giá trị tùy chọn để một Seq:sạch Scala cú pháp cho "Nối giá trị tùy chọn để Seq nếu nó tồn tại"

def example1(fooList: Seq[Foo], maybeFoo: Option[Foo]): Seq[Foo]) = { 
    if (maybeFoo.isDefined) 
    fooList :+ maybeFoo.get 
    else 
    fooList 
} 

def example2(fooList: Seq[Foo], maybeFoo: Option[Foo]): Seq[Foo]) = { 
    maybeFoo match { 
    case Some(foo) => fooList :+ foo 
    case None => fooList 
    } 
} 

Cả hai của những phương pháp làm việc, nhưng họ có vẻ dài dòng và xấu xí. Có một toán tử hoặc phương thức hiện có để thực hiện điều này một cách tự nhiên/chức năng hơn không?

Cảm ơn!

+1

Nếu bạn chỉ muốn dòng dòng phương pháp mà bạn có, bạn có thể viết 'fooOpt.map (fooSeq : + _). getOrElse (fooSeq) '. –

Trả lời

17

Lựa chọn ngầm chuyển đổi thành một chuỗi với 1 hoặc 0 sản phẩm nên các công việc sau:

scala> val opt = Some("a") 
opt: Some[String] = Some(a) 

scala> val nope = None 
nope: None.type = None 

scala> val seq = Seq("a", "b", "c") 
seq: Seq[String] = List(a, b, c) 

scala> seq ++ opt 
res3: Seq[String] = List(a, b, c, a) 

scala> seq ++ nope 
res4: Seq[String] = List(a, b, c) 
4
maybeFoo.foldLeft(fooList)(_ :+ _) 
Các vấn đề liên quan