Tôi rất muốn khuyến khích bạn không nên sử dụng formValues.get("whatever")
, một phần vì cú pháp là rất khó hiểu-có vẻ như bạn đang gọi điện thoại get
với đối số chính (ví dụ như trên bản đồ), khi thực sự bạn đang gọi get
trên Option
(hoạt động không an toàn — bạn nên tránh xa get
trên Option
về cơ bản luôn) và sau đó apply
trên bản đồ kết quả (cũng không an toàn). Mớ hỗn độn này là lỗi của Scala, không phải của bạn, nhưng bạn vẫn muốn tránh bước vào nó.
Thay vào đó bạn có thể sử dụng exists
trên Option
cùng với contains
trên bản đồ. Dưới đây là một ví dụ hơi đơn giản:
val containsKey = formValues.exists(_.contains(key))
này sẽ trở lại true
chỉ khi Option
không bị để trống và bản đồ nó chứa có chìa khóa.
Một cách tiếp cận tốt hơn là để tránh -statement if
như thế này:
val os: Option[Seq[String]] = for {
m <- formValues
v <- m.get(key)
} yield v
os.foreach { v => \\ do something with the value }
Ở đây chúng ta kết thúc với một Option
chứa giá trị được trỏ đến bởi key
nếu bản gốc Option
không bị để trống và bản đồ chứa khóa đó.
Nguồn
2014-06-13 12:47:49